Использование ключевого слова шаблона перед именем зависимого шаблонаC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Гость
 Использование ключевого слова шаблона перед именем зависимого шаблона

Сообщение Гость »


Рассмотрев следующий пример кода, я ожидаю, что здесь придется использовать ключевое слово template, чтобы компилятор рассматривал переменную v как шаблон. Однако MSVC отвергает использование ключевого слова template, тогда как Clang и GCC фактически требуют его. Какое конкретное правило стандарта C++20 требует или запрещает использование ключевого слова template в этом случае?

struct s { шаблон статический constexpr auto v = true; }; // все ок static_assert([](auto x){ return decltype(x)::template v; }(s{})); // clang ок, gcc ок, msvc нет static_assert([](auto x){ return x.template v; }(s{})); // лязг нет, gcc нет, msvc ок static_assert([](auto x){ return x.v; }(s{})); Живой пример

Сообщение об ошибке от Clang:

:10:36: ошибка: используйте ключевое слово «шаблон» для обработки «v» как имя зависимого шаблона 10 | static_assert([](auto x){ return x.v; }(s{})); | ^ | шаблон Сообщение об ошибке от MSVC:
(8): ошибка C2187: синтаксическая ошибка: «шаблон» здесь был неожиданным (8): примечание: см. ссылку на создание экземпляра шаблона функции. 'auto ::operator ()(_T1) const' компилируется с [ _T1=с ]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»