我在使用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
,我都需要获取成员函数的类型。
请帮忙。
修改
答案 0 :(得分:3)
为了形式(对问题有答案),这似乎是VC2010编译器中的一个错误。提交错误报告,以便Microsoft可以在下一个版本中修复它。