以下SFINAE测试无法检查是否是鸭子(如果有“ void quack()”成员函数,则是鸭子)。我不明白为什么。有什么想法吗?
struct Duck
{
void quack() {}
};
struct Pig
{
void groink() {}
};
template<class T>
auto test_duck(const T& t, int)
-> decltype(t.quack(), bool())
{
return true;
}
template<class T>
auto test_duck(const T& t, long)
{
return false;
}
template<class T>
bool is_duck(const T& t)
{
return test_duck(t, 0);
}
int main()
{
Duck duck;
Pig pig;
cout << is_duck(duck) << endl;
cout << is_duck(pig) << endl;
}
答案 0 :(得分:1)
问题是您传递的是const Duck&
,但是Duck
仅具有非常量quack()
方法。
编辑:看起来评论已经及时发现了。如果@PiotrSkotnicki要发布答案(而不是在评论中回答),我将其删除。