std :: remove_pointer无法删除VS2012上的const volatile函数指针

时间:2012-12-08 14:32:01

标签: c++ stl

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

1 个答案:

答案 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;
}

输出:

在vs2012中

is a const function pointer

is a const function pointer     

在gcc中

is a const function pointer

is a function