4

我试图用来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计算结果为假吗?

(代码在g++4.7、g++4.8和clang++3.2下测试)

4

1 回答 1

12

那是因为decltype(*pmain)产生了对函数类型的引用std::function,这是false预期的。尝试:

is_function<remove_reference<decltype(*pmain)>::type>::value

顺便说一句:ISO C++ 禁止获取 ::main() 的地址

于 2013-09-03T17:54:41.320 回答