Рассмотрим следующий пример:
struct B { operator int(); };
template<class T>
struct X:B
{
using B::operator T;
};
GCC принимает код, а Clang и MSVC отклоняет его. Что правильно?
Обратите внимание, что если базовый тип зависит, все компиляторы принимают код:
template<class T>
struct B { operator T(); };
template<class T>
struct X:B<T>
{
using B<T>::operator T;
};