Это ошибка в G ++. operator T
является неквалифицированным зависимым именем (потому что оно содержит T
и поиск, таким образом, будет различным в зависимости от его типа). Как таковой он должен быть найден при создании экземпляра. Стандартные правила
Два имени одинаковы , если
- ...
- это имена пользовательских функций преобразования, сформированных с одним и тем же типом.
Таким образом, имя типа, указанное после ключевого слова оператора, никоим образом не должно совпадать с лексическим. Вы можете применить следующий обходной путь, чтобы заставить GCC рассматривать его как зависимое имя
template<typename T, typename>
struct identity { typedef T type; };
class Foo
{
public:
operator int() const;
template <typename T> T get() const {
return this->identity<Foo, T>::type::operator T();
}
};