【发布时间】:2012-02-03 20:59:35
【问题描述】:
当我尝试编译时
template<bool val>
struct boolean { static const bool value = val; };
template<typename T>
struct is_callable : boolean<sizeof((*(T*)0)()) >= 0> { }; // error!
int main(void) { bool b = is_callable<int (*)()>::value; }
我明白了:
error C2064: term does not evaluate to a function taking 0 arguments
see reference to class template instantiation 'is_callable<T>' being compiled
我很确定 int (*)() 可以使用 0 参数调用...那为什么不编译呢?
【问题讨论】:
-
@KerrekSB:嗯,这很有趣......我在 VC 2010 上尝试过,它也给出了错误。那么它是一个错误吗?我不知道,因为有一个空指针被取消引用,但实际上我看不出它有什么问题......
-
没有取消引用。
sizeof不评估它的论点。
标签: c++ visual-c++ visual-c++-2008