【发布时间】:2015-07-24 00:37:45
【问题描述】:
这是我的代码:
bool test(){
return true;
}
template<int asd[], bool T = test()>
void evenprocessor(){
std::cout<<"this is called"<<std::endl;
};
int asd[] = {1,2,3};
int main(int argc, char** argv) {
evenprocessor<asd>();
return 0;
}
我正在为 sfinae 做一些测试,我很好奇这样的事情是否可能。调用模板后评估函数。我收到一条错误消息,指出 没有匹配的函数可以调用 evenprocessor。
如果在函数或模板参数中使用函数,我是不是做错了什么或者无法评估函数?像这样的:
template<int asd[]>
void evenprocessor(char(*)[test()]){
std::cout<<"this is called"<<std::endl;
};
int asd[] = {1,2,3};
int main(int argc, char** argv) {
evenprocessor<asd>();
return 0;
}
我收到一条错误消息,指出 variable or field evenprocessor declared void。为什么它被宣布为无效?
【问题讨论】:
-
你可能错过了
constexprconstexpr bool test() { return true;} -
模板用于传递类型信息或计数。您正在传递变量。你能解释一下为什么非模板版本(即: void evenprocessor(int*) )不适合你吗?
-
用于测试/教育目的并了解他们的行为。
-
你在做什么没有任何意义。您使用模板传递类型信息。在您的示例中,您试图传递一个变量。这不是模板的用途。
-
使用 Clang:
template argument deduction/substitution failed: call to non-constexpr function 'bool test()'。使用constexpr可以正常工作。