The following code fails to compile. The error messages are :
Error1 error C3930: 'foo' : no overloaded function has restriction specifiers that are compatible with the ambient context ''
Error2 error C2660: 'f1' : function does not take 0 arguments
Error3
IntelliSense: amp-restricted function "int foo() restrict(amp)" (declared at line 5) must be called from an amp-restricted function
#include <amp.h>
#include <iostream>
using namespace std;
int foo() restrict(amp) { return 5; }
int f1(int x = foo()) restrict(amp) {
return x;
}
int main()
{
using namespace concurrency;
int a[10] = {0};
array_view<int> av(10, a);
parallel_for_each(av.extent, [=](index<1> i) restrict(amp) {
av[i] = f1();
});
for(unsigned i=0; i<10; ++i) {
cout << av[i] << "\n";
}
return 0;
}
Strangely, when I remove the restrict(amp) on foo(), and replace the call of f1() in the lambda with, say, 5, the program compiles fine. So what are the rules for function calls in default arguments to amp functions?