我发现检测类的成员使用全局模板功能不起作用:
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的foo,是否正常?还是编译器错误? gcc 4.8.1
最佳答案
编译器在调用TestBB
时尚未看到printinfo
的定义,只有前进声明。那时,它不知道TestBB
的任何成员。