std::remove_pointer
无法删除VS2012上的const volatile函数指针
这是vs2012中的一个buf吗?
#include "iostream"
#include <typeinfo>
using namespace std;
int main()
{
typedef void (* const cfunp_t) ();
cout<<typeid(cfunp_t).name()<<endl;
cout<<typeid(std::remove_pointer<cfunp_t>::type).name()<<endl;
return 0;
}
vs2012的输出构建:
void (__cdecl*)(void)
void (__cdecl*)(void) // can not remove the const function pointer
mingw gcc 4.7.2输出构建
PFvvE
FvvE // can remove the const function pointer
答案 0 :(得分:0)
谢天谢地
我改变了我的测试代码:
#include "iostream"
#include <typeinfo>
using namespace std;
typedef void fun_t();
typedef fun_t* funp_t;
typedef const funp_t cfunp_t;
template<typename T>
void print_type()
{
cout<<"unknow"<<endl;
}
template<>
void print_type<fun_t>()
{
cout<<"is a function"<<endl;
}
template<>
void print_type<funp_t>()
{
cout<<"is a function pointer"<<endl;
}
template<>
void print_type<cfunp_t>()
{
cout<<"is a const function pointer"<<endl;
}
int main()
{
print_type<cfunp_t>();
print_type<std::remove_pointer<cfunp_t>::type>();
return 0;
}
输出:
is a const function pointer
is a const function pointer
在gcc中
is a const function pointer
is a function