Частичная специализация шаблона класса с нетиповым параметром шаблона decltype(auto)C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Частичная специализация шаблона класса с нетиповым параметром шаблона decltype(auto)

Сообщение Anonymous »


В следующем примере программы шаблон класса с нетиповым параметром шаблона decltype(auto) частично специализирован с нетиповым параметром шаблона auto: шаблон struct A { static const int v = 0; }; шаблон struct A { static const int v = 1; }; и это принимается всеми компиляторами, только GCC выдает предупреждение

предупреждение: частичная специализация 'struct A' не более специализирована, чем примечание: основной шаблон 'template struct A' Являются ли следующие утверждения истинными (как в Clang)?

const int i = 0; static_assert( A::v == 1); //ок везде static_assert( A::v == 0);//ОК только в Clang Насколько я понимаю, здесь A в Clang выбирает основной шаблон класса с параметром типа const int&, поэтому A ::v == 0. А A в Clang выбирает специализацию с помощью параметра типа int, поэтому A::v == 1.

Но GCC и MSVC с этим не согласны и выбирают специализацию в обоих случаях, поэтому A::v == 1. Онлайн-демо: https://godbolt.org/z/Wfd8e1KPz

Какой компилятор здесь правильный по стандарту?
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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