是否可以在using声明中引用用户定义的转换模板?

App*_*les 8 c++ inheritance using-declaration conversion-operator language-lawyer

在从class B继承的类中A,可以使用using声明将in的成员(甚至是模板)带A进去B,如下所示:

struct A {
    template <typename T>
    void foo();
};

struct B : private A {
    using A::foo;
};
Run Code Online (Sandbox Code Playgroud)

但是可以为转换模板完成吗?

struct A {
    template <typename T>
    operator T();
};

struct B : private A {
    using A::operator /* ??? */;
};
Run Code Online (Sandbox Code Playgroud)

似乎没有办法通过名称来引用模板,但是我希望被证明是错误的或得到一些澄清。

Ayj*_*jay 3

作为解决方法,您可以强制转换为基类并显式转换它:

struct A {
    template <typename T>
    operator T() {
        return T{};
    }
};

struct B : private A {
    template <class T>
    operator T() {
        return static_cast<T>(static_cast<A&>(*this));
    }
};

int main() {
    A a;
    B b;
    int i_a = a;
    int i_b = b;
}
Run Code Online (Sandbox Code Playgroud)