1

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
4

1 回答 1

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
于 2012-12-08T15:02:05.297 回答