std::piecewise_construct_t
Материал из cppreference.com
Определено в заголовочном файле <utility>
|
||
struct piecewise_construct_t { explicit piecewise_construct_t() = default; }; |
(начиная с C++11) | |
constexpr std::piecewise_construct_t piecewise_construct{}; |
(начиная с C++11) (до C++17) |
|
inline constexpr std::piecewise_construct_t piecewise_construct{}; |
(начиная с C++17) | |
std::piecewise_construct_t
это пустой тип класса тега, используемый для устранения неоднозначности между различными функциями, принимающими два аргумента кортежа. Константа std::piecewise_construct
является его экземпляром.
Перегрузки, не использующие std::piecewise_construct_t
, предполагают, что каждый аргумент кортежа становится элементом пары. Перегрузки, использующие std::piecewise_construct_t
, предполагают, что каждый аргумент кортежа используется для кусочного создания нового объекта указанного типа, который станет элементом пары.
[править] Пример
Запустить этот код
#include <iostream> #include <utility> #include <tuple> struct Foo { Foo(std::tuple<int, float>) { std::cout << "Создание Foo из tuple\n"; } Foo(int, float) { std::cout << "Создание Foo из int и float\n"; } }; int main() { std::tuple<int, float> t(1, 3.14); std::pair<Foo, Foo> p1(t, t); std::pair<Foo, Foo> p2(std::piecewise_construct, t, t); }
Вывод:
Создание Foo из tuple Создание Foo из tuple Создание Foo из int и float Создание Foo из int и float
[править] Отчёты о дефектах
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
Номер | Применён | Поведение в стандарте | Корректное поведение |
---|---|---|---|
LWG 2510 | C++11 | конструктор по умолчанию был неявным, что могло привести к двусмысленности | сделан явным |
[править] Смотрите также
создаёт новый pair (public функция-элемент std::pair )
|