Open kelbon opened 1 year ago
Первую часть скоро примут в стандарт в https://wg21.link/P1061
Вторая часть весьма противоречива и требует прототипа. Если напишите - будет круто, а без него - идея обречена на провал
Первую часть скоро примут в стандарт в https://wg21.link/P1061
Вторая часть весьма противоречива и требует прототипа. Если напишите - будет круто, а без него - идея обречена на провал
отлично, хорошо что ещё добавили для index_sequence раскрытие, (тут я об этом не писал, но в других местах при обсуждении этой фичи упоминал не раз) А где посмотреть на статус, как определить, что "скоро примут"?)
// это можно также использовать для создания неименованных переменных
// std::get для lock_guard возвращает *this чтобы это было возможно
auto [...] = std::lock_guard(mtx);
// std::scoped_lock это буквально логический тупл локов
auto [...] = std::scoped_lock(mtxs...);
Возникло сомнение. Такой синтакс может нежелательно распаковать то, что не хотелось бы распаковать? Например, если в правой части возвращается некая структура.
Увидел пропозал в С++26 на auto _ которое бы заменялось на [[maybe_unused]] auto x и сгорело немного
Кажется существуют способы гораздо лучше с точки зрения языка, которые решают сразу несколько проблем, моё предложение решает проблемы:
Итак, первая часть пропозала:
Вторая часть пропозала:
В контексте декларации шаблонных аргументов ... X будет означать пак любых аргуменов, например здесь Args это пак ЛЮБЫХ аргументов, не только типов
Это позволяет сделать следующее
Контекст декларации аргументов функции
Контекст передачи шаблонных шаблонных аргументов Template<Type, ...> - алиас на Template с requires что первый тип same_as
Пример:
Контекст вывода типов переменных (CTAD)
Механизм работы частичного CTAD: У компилятора имеются дедакт гайды, в некоторых из них типы СПРАВА undeductible, в этом случае это называется частичный дедакт гайд(сейчас это запрещено) При передаче пользователем части аргументов компилятор подставляет их и некоторые из частичных дедакт гайдов становятся полными, после этого компилятор делает обычный CTAD как сейчас(это похоже на C++20 фичу с дедакт гайдом из алиасов, просто фактически как и выше Template<Args, ...> создаёт алиас по которому компилятор выводит полный тип)
Пример:
Этот частичный дедакт гайд также можно переписать с помощью пропозала короче