使用带成员函数指针的decltype

时间:2011-07-02 14:20:00

标签: c++ visual-studio visual-studio-2010 templates c++11

我在使用decltype成员函数指针时遇到了一些麻烦:

#include <iostream>
#include <type_traits>

struct A
{
    void func1() {}
    typedef decltype(&A::func1) type;
};

int wmain(int argc, wchar_t* argv[])
{
    typedef decltype(&A::func1) type;

    //Case 1
    std::wcout
        << std::boolalpha
        << std::is_member_function_pointer<type>::value
        << std::endl;

    //Case 2
    std::wcout
        << std::boolalpha
        << std::is_member_function_pointer<A::type>::value
        << std::endl;

    system("pause");
    return 0;
}

案例1按预期打印true,但案例2打印false

decltype是否会删除某个类型的“member”属性?如果是这样,为什么?

另外,有没有办法防止这种行为?无论我在哪里使用decltype,我都需要获取成员函数的类型。

请帮忙。

修改

Reported to Microsoft

1 个答案:

答案 0 :(得分:3)

为了形式(对问题有答案),这似乎是VC2010编译器中的一个错误。提交错误报告,以便Microsoft可以在下一个版本中修复它。