Namespaces
Variants

std::in_place, std::in_place_type, std::in_place_index, std::in_place_t, std::in_place_type_t, std::in_place_index_t

Материал из ru.cppreference.net
 
 
Библиотека утилит
Поддержка языка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования возможностей библиотеки (C++20)
Программные утилиты
Функции с переменным числом аргументов
Поддержка корутин (C++20)
Поддержка контрактов (C++26)
Трёхстороннее сравнение
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Общие утилиты
Операторы отношений (устарело в C++20)
 
Определено в заголовке <utility>
struct in_place_t { explicit in_place_t() = default; };
(1) (начиная с C++17)
inline constexpr std::in_place_t in_place {};
(2) (начиная с C++17)
template< class T >
struct in_place_type_t { explicit in_place_type_t() = default; };
(3) (начиная с C++17)
template< class T >
constexpr std::in_place_type_t<T> in_place_type {};
(4) (начиная с C++17)
template< std::size_t I >
struct in_place_index_t { explicit in_place_index_t() = default; };
(5) (начиная с C++17)
template< std::size_t I >
constexpr std::in_place_index_t<I> in_place_index {};
(6) (начиная с C++17)
1,3,5) Шаблоны типов/типов std::in_place_t, std::in_place_type_t и std::in_place_index_t могут использоваться в списке параметров конструктора для сопоставления с соответствующим тегом.
2,4,6) Соответствующие экземпляры std::in_place, std::in_place_type и std::in_place_index типа (1,3,5) являются тегами разрешения неоднозначности, которые можно передать конструкторам, чтобы указать, что содержащийся объект должен быть создан на месте, и (для двух последних) тип создаваемого объекта.

Стандартная библиотека

Следующие типы стандартной библиотеки используют (1-6) в качестве тегов устранения неоднозначности:

(C++17)
объекты, содержащие экземпляры любого CopyConstructible типа
(класс)
(C++23)
обёртка, содержащая либо ожидаемое, либо ошибочное значение
(шаблон класса)
перемещаемая обёртка любого вызываемого объекта, поддерживающая квалификаторы в заданной сигнатуре вызова
(шаблон класса)
(C++17)
обёртка, которая может содержать или не содержать объект
(шаблон класса)
(C++17)
типобезопасное размеченное объединение
(шаблон класса)

Смотрите также

указывает, что элементы диапазона отсортированы и уникальны
(тег)
указывает, что элементы диапазона отсортированы (уникальность не требуется)
(тег)