我试图使用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的最后一个表达式计算为false吗?
(在g++4.7、g++4.8和clang++3.2下测试的代码)
发布于 2013-09-03 17:54:41
这是因为decltype(*pmain)生成对函数类型的引用,std::function是false。尝试:
is_function<remove_reference<decltype(*pmain)>::type>::value顺便提一下: ISO C++禁止使用以下地址::main()
https://stackoverflow.com/questions/18598417
复制相似问题