Ответ 1
Благодаря T.C. для указания на это:
Основной вопрос 2070, который находится на стадии разработки (это подтвердило свою проблему, и формулировка решения работает on), касается этого случая. Предлагаемое исправление требует, чтобы оба идентификатора были одинаковыми идентификаторами, чтобы этот код принимался как наследующий конструктор.
В этом свете сообщение об ошибке из clang имеет смысл, так как T:: X будет типом X, который запускает ошибку типа "из шаблона без тега имени".
Оригинальное сообщение:
Итак, мне кажется, что реальный вопрос: "Допустимо ли, что экземпляр шаблона изменяет семантический смысл используемого оператора?"
И ответ: это не запрещено. Я не знаю, было ли это взаимодействие предвидено и предназначено авторами стандарта. Но, насколько я могу судить, ссылаясь как на объявление использования в разделе 10, так и на инициализацию шаблона в разделе 17 буквой стандарта да, using T::X
разрешено и да, объявление использования станет наследующим конструктором, когда T равно X.