Почему объявление функции ограниченной шаблона с помощью пакета параметров шаблона не компиляция, когда ограничение имее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
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

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

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