type_trait的有成员故障如果使用全局函数
我发现检测类的成员使用全局模板功能不起作用:type_trait的有成员故障如果使用全局函数
void printinfo(std::true_type) {
cout<<"true_type!";
}
void printinfo(std::false_type)
{
cout<<"false_type!";
}
class TestAA
{
public:
void foo();
};
class TestBB;
template<typename T,typename =decltype(&T::foo)>
std::true_type havefoo(T*){return{};}
std::false_type havefoo(...){return{};}
int main()
{
printinfo(havefoo((TestAA*)nullptr));
printinfo(havefoo((TestBB*)nullptr));
}
class TestBB
{
public:
void foo();
};
它无法检测TestBB的富,是正常的吗?或编译器错误? gcc 4.8.1
回答:
在调用printinfo
时,编译器还没有看到TestBB
的定义,只有前向声明。那时它不知道TestBB
的任何成员。
以上是 type_trait的有成员故障如果使用全局函数 的全部内容, 来源链接: utcz.com/qa/263388.html