使用 MSVC 在模板函数中调用用户定义的转换运算符的正确方法
Correct way to call user defined conversion operator in templated function with MSVC
我需要像这样在 class 中调用模板化转换运算符:
struct S {
template<typename T>
operator T() const {
return T{};
}
template<typename T>
T test()
{
return operator T();
}
};
int main(){
S s;
s.test<int>();
return 0;
}
此代码使用 clang 编译但不使用 MSVC(19),给我一个 c2352 错误。语法正确吗?
语法是正确的,因为你的工作可能是明确的 this->operator T()
:
template<typename T>
T test()
{
return this->operator T();
}
我需要像这样在 class 中调用模板化转换运算符:
struct S {
template<typename T>
operator T() const {
return T{};
}
template<typename T>
T test()
{
return operator T();
}
};
int main(){
S s;
s.test<int>();
return 0;
}
此代码使用 clang 编译但不使用 MSVC(19),给我一个 c2352 错误。语法正确吗?
语法是正确的,因为你的工作可能是明确的 this->operator T()
:
template<typename T>
T test()
{
return this->operator T();
}