std::piecewise_construct_t
Материал из cppreference.com
<tbody>
</tbody>
<tbody class="t-dcl-rev ">
</tbody><tbody>
</tbody>
| Определено в заголовочном файле <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)
|