我有以下示例代码:
class Serializable {};
class MyData : public Serializable {};
void GetData( Serializable& ) {}
template<typename T>
void GetData( T& data )
{
std::istringstream s{"test"};
s >> data;
}
int main()
{
MyData d;
GetData(d);
}
(现场样品)
基于重载决议规则,非模板版本应该是首选,因为基类是 type Serializable
。但是,我希望 SFINAE 在模板版本中在为重载解析实例化时出现错误时启动(因为如果没有为类型定义 >> 运算符,则不应考虑它)。
为什么即使模板不会被使用它仍然失败?