我正在使用 C++AMP 为内部编写一个库,我发现以下内容不起作用,我很好奇为什么(如果我restrict(amp)
从仿函数中删除它会起作用):
template <typename T>
using SumType = decltype( std::declval<T>() + std::declval<T>() );
template <typename T, typename Func>
auto TestFunc(T t, Func f) -> SumType<decltype(f(t))>
{
return f(t) + f(t);
}
int main() {
auto f = []( float flVal ) restrict(amp) {
return flVal * flVal;
};
float flResult = TestFunc( 1.0f, f ); // Error here: "no instance of function template 'TestFunc' matches the argument list"
}
但是,如果我restrict(amp)
从 的定义中删除f
,程序将按预期编译。AMP 开放标准中是否有可以阐明这一点的条款?
此外,如果我们在 的定义中使用以下内容,TestFunc
即使使用说明符,它也可以正确编译restrict(amp)
:
template <typename T, typename Func>
auto TestFunc( T t, Func f ) -> T
{
return f(t) + f(t);
}