Разрешены ли шаблоны ограниченных псевдонимов?

Проверил три основных компилятора, все они позволяют накладывать ограничения на шаблоны псевдонимов, например:

template<class T, std::constructible_from<T> V>
using var_t = std::variant<T, V>;

template<class T, class...Args>
requires(std::constructible_from<T, Args...>)
using tup_t = std::tuple<T, Args...>;

Но cppreference говорит:

Syntax
Alias declarations are declarations with the following syntax:

using identifier attr (optional) = type-id ;   (1)

template < template-parameter-list >
using identifier attr (optional) = type-id ;    (2)    

Является ли cpprefrence неправильным и ограничения разрешены?

Как именно это неправильно? Перешли ли вы по ссылке рядом с списком параметров шаблона, чтобы узнать, что разрешено, а что запрещено в списке параметров шаблона? Там описаны ограничения.

StoryTeller - Unslander Monica 07.07.2024 23:31

@StoryTeller - Unslander Моника, как шаблон-список параметров допускает предложение requires?

Gene 07.07.2024 23:39

Зачем тогда вы спрашиваете об ограничениях вообще?

StoryTeller - Unslander Monica 07.07.2024 23:41

@StoryTeller - Разоблачительница Моника - быть наполовину неправым - это неправильно, не так ли?

Gene 08.07.2024 00:01

Множество путей ведут к тому, чтобы ошибиться. Это случается и тогда, когда слишком много обобщают. Я думаю, вам и cppref просто нужно пойти навстречу.

StoryTeller - Unslander Monica 08.07.2024 00:15

В cppreference есть третья часть этого определения с предложением requires, которое правильно отмечено как C++20. Чтобы получить подробный результат с этой страницы, вам необходимо установить для «стандартной версии» значение «diff» вверху страницы. Я предполагаю, что в вашем браузере установлена ​​старая версия. Одни и те же ссылки на cppreference могут восприниматься разными людьми по-разному. Я предполагаю, что «стандартная версия» хранится в файле cookie.

Red.Wave 08.07.2024 08:29

Red.Wave -- хорошая находка

Gene 08.07.2024 09:00
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
7
84
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Предпочтение очень хорошее, но не всегда актуальное.

Да, предложение require разрешено в шаблоне псевдонима , это частный случай объявления шаблона . См. temp.alias.

template-declaration:
    template-head declaration
    template-head concept-definition    

template-head:
    template < template-parameter-list > requires-clause[opt]

tnx, я подозревал, что компиляторы были правы, а cppreference ошибался

Gene 07.07.2024 23:49

Другие вопросы по теме

Допустимо ли имя типа необязательного <void>?
Достаточно ли времени жизни локальной лямбды в качестве обработчика завершения для co_spawn, т.е. функции с functor&&?
Можно ли использовать auto для определения переменной статического класса?
Если лямбда объявлена ​​внутри аргумента по умолчанию, отличается ли она для каждого сайта вызова?
Определение термина «значение объекта» в CPython
Функция шаблона, принимающая указатель на член, отказывается компилироваться
Что делает Memory_order::acquire для операции чтения-изменения-записи?
Почему объявление функции глобальной области со встроенным типом arg должно быть видимым перед неквалифицированным вызовом этого имени с аргументом типа шаблона?
Может ли компилятор C++ объединить соседние блокировки мьютексов?
Должен ли поставщик хранилища иметь тип char, unsigned char или std::byte? или это может быть любой тип?