当我尝试编译为什么术语不评估一个带有0个参数的函数?
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
参数...那么,为什么不这样编?
工程在GCC 4.6.2。 – 2012-01-06 02:19:39
@KerrekSB:呵呵,这很有趣...我用VC 2010试了一下,它也给出了一个错误。那么它是一个错误?我不知道,因为有一个空指针被解除引用,但实际上我没有看到它的任何错误... – Mehrdad 2012-01-06 02:22:48
没有取消引用。 'sizeof'不会评估它的参数。 – 2012-01-06 02:24:30