std::piecewise_construct_t
De cppreference.com
<tbody>
</tbody>
| Definido en el archivo de encabezado <utility>
|
||
struct piecewise_construct_t { }; |
(desde C++11) (hasta C++17) |
|
struct piecewise_construct_t { explicit piecewise_construct_t() = default; }; |
(desde C++17) | |
std::piecewise_construct_t es un tipo etiqueta de clase vacía utilizado para desambiguar entre diferentes funciones que toman dos argumentos de tupla.
Las sobrecargas que no utilizan std::piecewise_construct_t suponen que cada argumento de tupla se vuelve un elemento de un par (std::pair). Las sobrecargas que utilizan std::piecewise_construct_t suponen que cada argumento de tupla es utilizado para construir, por parte por parte, un objeto nuevo del tipo especificado, que se volverá el elemento del par.
Ejemplo
Ejecuta este código
#include <iostream>
#include <utility>
#include <tuple>
struct Foo {
Foo(std::tuple<int, float>)
{
std::cout << "Foo construida a partir de una tupla\n";
}
Foo(int, float)
{
std::cout << "Foo construida a partir de un int y un 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);
}
Salida:
Foo construida a partir de una tupla
Foo construida a partir de una tupla
Foo construida a partir de un int y un float
Foo construida a partir de un int y un float
Informes de defectos
Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
| ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 2510 | C++11 | El constructor por defecto no era explicit, lo que podía llevar a ambigüedad.
|
Se hizo explicit.
|
Véase también
(C++11) |
Un objeto de tipo piecewise_construct_t utilizado para eliminar la ambigüedad de funciones para construcción por segmentos/tramos. (constante) |
| Construye un par nuevo. (función miembro pública de std::pair)
|