使用由 Visual Studio 中的 decltype 派生的 Return 类型专门化模板
Specializing a Template With a Return Type Derived by decltype in Visual Studio
给定以下代码:
template<typename ValueType>
decltype(ValueType{} == ValueType{}) Compare(const ValueType& value, const ValueType& expected)
{
return value == expected;
}
template<>
decltype(float{} == float{}) Compare<float>(const float& value, const float& expected)
{
return std::abs(value - expected) < 1e-4F;
}
我希望调用 Compare(13.0F, 42.0F)
能够正确调用专业化 which it does on gcc. But it fails to on visual-studio-2017。我收到错误:
error C2912: explicit specialization bool Compare<float>(const float &,const float &)
is not a specialization of a function template
我能做些什么来帮助指导 visual-studio?
纯粹为了安抚 VC++,您可以提取 return 类型作为另一个模板参数。
template<typename ValueType, typename RetType = decltype(ValueType{} == ValueType{})>
RetType Compare(const ValueType& value, const ValueType& expected)
{
return value == expected;
}
template<>
decltype(float{} == float{}) Compare<float>(const float& value, const float& expected)
{
return std::abs(value - expected) < 1e-4F;
}
这使得 VC++ 接受代码。
给定以下代码:
template<typename ValueType>
decltype(ValueType{} == ValueType{}) Compare(const ValueType& value, const ValueType& expected)
{
return value == expected;
}
template<>
decltype(float{} == float{}) Compare<float>(const float& value, const float& expected)
{
return std::abs(value - expected) < 1e-4F;
}
我希望调用 Compare(13.0F, 42.0F)
能够正确调用专业化 which it does on gcc. But it fails to on visual-studio-2017。我收到错误:
error C2912: explicit specialization
bool Compare<float>(const float &,const float &)
is not a specialization of a function template
我能做些什么来帮助指导 visual-studio?
纯粹为了安抚 VC++,您可以提取 return 类型作为另一个模板参数。
template<typename ValueType, typename RetType = decltype(ValueType{} == ValueType{})>
RetType Compare(const ValueType& value, const ValueType& expected)
{
return value == expected;
}
template<>
decltype(float{} == float{}) Compare<float>(const float& value, const float& expected)
{
return std::abs(value - expected) < 1e-4F;
}
这使得 VC++ 接受代码。