При голосовании P1141R1, сколько типов выводится из нескольких выведенных параметров с одинаковым ограничением? - PullRequest
0 голосов
/ 14 ноября 2018

Согласно концепции TS, в то время как выводимый параметр без ограничений каждый раз выдает новый параметр типа шаблона, выводимые параметры с ограничениями дают только один параметр типа шаблона на ограничение:

[](auto a, auto b) // IS-A
[]<class ArgA, class ArgB>(ArgA a, ArgB b)

[](Constraint a, Constraint b) // IS-A
[]<Constraint Type>(Type a, Type b)

Теперь за P1141R1 проголосовали (см. Отчет о поездке Херба Саттера ), и он вновь вводит короткий синтаксис для ограниченных выводимых параметров с "прилагательным синтаксисом" для ограниченного авто:

void fun(Constraint auto a, Constraint auto b);

с замечанием, что «Появление auto (включая Constraint auto) в списке параметров говорит нам, что мы имеем дело с шаблоном функции.»

Однако нет информации о том, сколько отдельных типов мог бы дать такой синтаксис. Итак, вопрос в следующем: для двух ограниченных выводимых параметров с одинаковым ограничением (как указано выше), будет ли шаблон с одним параметром типа или правила будут ослаблены из-за наличия ключевого слова auto?

Редактировать: тип шаблона аргумент параметр.

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Это объявление:

void fun(Constraint auto a, Constraint auto b);

означает, что мы делаем так называемое «независимое связывание».

Это означает то же самое, что и более длинный частичный-идентификатор-концепции синтаксис:

template <Constraint _T, Constraint _U>
void fun(_T a, _U b);

и еще более длинный полный синтаксис с требованием предложения:

template <typename _T, typename _U>
    requires Constraint<_T> && Constraint<_U>
void fun(_T a, _U b);

за исключением того, что у вас нет доступа к именам _T и _U (если вам нужны эти имена типов, вам придется прибегнуть к одной из более длинных опций синтаксиса).

<ч />

Для длинного списка аргументов относительно того, почему «независимое связывание» является лучшим выбором, чем «согласованное связывание», см. P0464 : Пересмотр значения foo(ConceptName, ConceptName).

0 голосов
/ 14 ноября 2018

Люди действительно должны прекратить писать вводящие в заблуждение отчеты о поездках со ссылками на устаревшие документы, по крайней мере, без гигантской неоново-розовой оговорки. За документ проголосовал P1141R2, который будет доступен для общественности через несколько недель. Утвержденный дизайн примерно соответствует частям 1, 3 и 4 P1141R1.

Вы получаете независимую привязку, т.е. два параметра шаблона в вашем примере:

Сокращенный шаблон функции эквивалентен шаблону функции (17.6.5) чей список параметров шаблона включает в себя один придуманный тип шаблон-параметра для каждого вхождения типа заполнителя в decl-specier-seq из объявления параметров в функциях параметр-type-list, в порядке появления.

Это было ожидаемое направление, по крайней мере, с начала этого года.

...