Рассмотрим следующий код:
struct S {
using T = int;
operator T() { return 42; }
};
int main() {
S s;
S::T t = s;
// Is the following line correct?
t = s.operator T();
}
Он компилируется с помощью GCC (4.9/5.1/6.1), но он не компилируется с помощью clang (3.8/3.7).
Возвращаемая ошибка:
error: неизвестное имя типа 'T'; вы имели в виду "S:: T"?
Какой компилятор прав в этом случае и почему?
Примечание
Решение этого вопроса зависит от квалификации T
:
t = s.operator S::T();
Вопрос не в том, как заставить его работать.