使用 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 错误。语法正确吗?

Demo

语法是正确的,因为你的工作可能是明确的 this->operator T():

template<typename T>
T test()
{
    return this->operator T();
}

Demo