Рассмотрим следующий код:
struct S {
struct type {};
type type;
};
int main() {
typename S::type t;
(void) t;
}
Помимо того, что это далеко не хорошая идея, я экспериментировал, прочитав здесь еще один вопрос о SO.
Я обнаружил, что приведенный выше фрагмент скомпилировано без ошибок GCC и это отклонено clang 3.9 со следующей ошибкой:
error: typename specifier ссылается на тип типа «тип» не в типе 'в' S '
Я подозреваю, что clang в этом случае прав, и GCC ошибается (на самом деле, я открываю проблему для последнего).
Правильно ли это, или что действительное использование typename
?
Примечание. Я не спрашиваю, как это решить, я знаю, как это сделать. Я спрашиваю только, является ли этот код действительным или нет.