我发现检测类的成员使用全局模板功能不起作用:

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的任何成员。

10-08 14:31