Namespaces
Variants

std:: piecewise_construct, std:: piecewise_construct_t

From cppreference.net
Utilities library
Definido en el encabezado <utility>
struct piecewise_construct_t { explicit piecewise_construct_t ( ) = default ; } ;
(1) (desde C++11)
constexpr std:: piecewise_construct_t piecewise_construct { } ;
(2) (desde C++11)
(inline desde C++17)
1) std::piecewise_construct_t es un tipo de etiqueta de clase vacía utilizado para eliminar la ambigüedad entre diferentes funciones que toman dos argumentos de tipo tupla.
2) La constante std::piecewise_construct es una instancia de (1) .

Las sobrecargas que no utilizan std::piecewise_construct_t asumen que cada argumento de tupla se convierte en el elemento de un par. Las sobrecargas que utilizan std::piecewise_construct_t asumen que cada argumento de tupla se utiliza para construir, por partes, un nuevo objeto del tipo especificado, que se convertirá en el elemento del par.

Contenidos

Biblioteca estándar

Los siguientes tipos y funciones de la biblioteca estándar lo utilizan como etiqueta de desambiguación:

implementa tupla binaria, es decir, un par de valores
(plantilla de clase)
prepara la lista de argumentos que coincide con la variante de construcción uses-allocator requerida por el tipo dado
(plantilla de función)
una view que consiste en una secuencia generada produciendo repetidamente el mismo valor
(plantilla de clase) (objeto de punto de personalización)

Ejemplo

#include <iostream>
#include <tuple>
#include <utility>
struct Foo
{
    Foo(std::tuple<int, float>)
    {
        std::cout << "Constructed a Foo from a tuple\n";
    }
    Foo(int, float)
    {
        std::cout << "Constructed a Foo from an int and a float\n";
    }
};
int main()
{
    std::tuple<int, float> t(1, 3.14);
    std::cout << "Creating p1...\n";
    std::pair<Foo, Foo> p1(t, t);
    std::cout << "Creating p2...\n";
    std::pair<Foo, Foo> p2(std::piecewise_construct, t, t);
}

Salida:

Creating p1...
Constructed a Foo from a tuple
Constructed a Foo from a tuple
Creating p2...
Constructed a Foo from an int and a float
Constructed a Foo from an int and a float

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 2510 C++11 el constructor por defecto no era explícito, lo que podía llevar a ambigüedad hecho explícito

Véase también

construye un nuevo par
(función miembro pública de std::pair<T1,T2> )