Отобразить шаблонный оператор приведения из шаблонного базового класса

У меня есть шаблонный базовый класс с оператором шаблонного преобразования. Я хотел бы показать этот шаблонный оператор преобразования в производном классе (из-за поиска по зависимому имени).

template <class T>
class A
{
public:
template <class U>
operator A<U>() const { ... }
};

template <class T>
class B : public A<T>
{
public:
template <class U>
using A<T>::operator A<U>;
};

Есть ли способ сделать это? Приведенный выше код не работает, потому что он говорит мне, что я не может создать шаблон объявления об использовании.

3

Решение

Объявление-использование не может ссылаться на идентификатор шаблона, пространство имен, перечислитель с областью действия, деструктор базового класса. или специализации шаблона элемента для определенной пользователем функции преобразования.

2

Другие решения

Оператор преобразования по шаблону будет доступен через зависимый от аргумента поиск. По сути, так как вы всегда идете на преобразование с B пример, AОператор приведения не будет скрыт:

#include <iostream>template <class T>
class A
{
public:
template <class U>
operator A<U>() const {
std::cout << "The cast operator becomes availble through ADL\n";
return {};
}
};

template <class T>
class B : public A<T>
{
};

int main()
{
A<double> a1;
A<int> a2;

B<double> b1;
B<int>    b2;

a1 = b2;
a2 = b1;
}

демонстрация

1

По вопросам рекламы [email protected]