[英]Why does std::is_function<F> return false_type when F is deduced?
[英]Why does std::is_function evaluate to false when using on a dereferenced function pointer?
我试图使用std::is_function
来确定变量是否是函数指针。
运行以下代码时
#include <iostream>
#include <typeinfo>
using namespace std;
int main() {
typedef int(*functionpointer)();
functionpointer pmain = main;
cout << typeid(functionpointer).name() << " "<< is_function<functionpointer>::value << endl;
cout << typeid(decltype(pmain)).name() << " " << is_function<decltype(pmain)>::value << endl;
cout << typeid(decltype(main)).name() << " " << is_function<decltype(main)>::value << endl;
cout << typeid(decltype(*pmain)).name() << " " << is_function<decltype(*pmain)>::value << endl;
return 0;
}
输出是
PFivE 0
PFivE 0
FivE 1
FivE 0
任何有洞察力的人std::is_function
解释为什么std::is_function
的最后一个表达式求值为false吗?
(在g ++ 4.7,g ++ 4.8和clang ++ 3.2下测试的代码)
这是因为decltype(*pmain)
产生对函数类型的引用 ,对于该函数类型, std::function
为false
。 尝试:
is_function<remove_reference<decltype(*pmain)>::type>::value
BTW:ISO C ++禁止获取:: main()的地址
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.