Частичная специализация шаблона класса с нетиповым параметром шаблона 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

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

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