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
Определено в заголовочном файле <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++23) | обёртка, допускающая только перемещение, для любого вызываемого объекта, поддерживающего квалификаторы в заданной сигнатуре вызова (шаблон класса) |
|
(C++17) | обёртка, которая может содержать объект или не содержать его (шаблон класса) |
|
(C++17) | типобезопасное дискриминируемое объединение (шаблон класса) |
См. также
|
(C++23) | указывает, что элементы диапазона отсортированы и уникальны (тег) |
|
(C++23) | указывает, что элементы диапазона отсортированы (уникальность не требуется) (тег) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/in_place