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

回到顶部