Почему объявление функции ограниченной шаблона с помощью пакета параметров шаблона не компиляция, когда ограничение имееC++

Программы на C++. Форум разработчиков
Anonymous
Почему объявление функции ограниченной шаблона с помощью пакета параметров шаблона не компиляция, когда ограничение имее

Сообщение Anonymous »

Я попытался написать обобщенную версию std :: some_as , которая должна работать с любым положительным количеством аргументов типа.
Я написал следующую концепцию, сохраняя Первый параметр шаблона отделен от других параметров шаблона, потому что мне нужно было сравнить его с всеми остальными: < /p>

Код: Выделить всё

template 
concept all_same_v1 = (... && std::same_as);
< /code>
Однако при использовании приведенной выше концепции приведенный ниже код не компилируется на GCC и Clang, а компилируется на MSVC (ссылка Godbolt): < /p>
template  requires all_same_v1
void f(Ts&&... ts);
< /code>
Ошибка на GCC: < /p>
:6:36: error: pack expansion argument for non-pack parameter 'T1' of concept 'template concept all_same_v1'
6 | template  requires all_same_v1
|                                    ^~~~~~~~~~~~~~~~~~
:3:11: note: declared here
3 | template 
|           ^~~~~~~~
< /code>
Напротив, выполнение следующей реализации O (n²) работает: < /p>
template 
concept same_with_others = (... && std::same_as);

template 
concept all_same_v2 = (... && same_with_others);

template  requires all_same_v2
void f(Ts&&... ts);
Почему это так?


Подробнее здесь: https://stackoverflow.com/questions/791 ... meter-pack

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