Namespaces
Variants

std:: piecewise_construct, std:: piecewise_construct_t

From cppreference.net
Utilities library
Défini dans l'en-tête <utility>
struct piecewise_construct_t { explicit piecewise_construct_t ( ) = default ; } ;
(1) (depuis C++11)
constexpr std:: piecewise_construct_t piecewise_construct { } ;
(2) (depuis C++11)
(inline depuis C++17)
1) std::piecewise_construct_t est un type de marqueur de classe vide utilisé pour lever l'ambiguïté entre différentes fonctions qui prennent deux arguments de type tuple.
2) La constante std::piecewise_construct est une instance de (1) .

Les surcharges qui n'utilisent pas std::piecewise_construct_t supposent que chaque argument tuple devient l'élément d'une paire. Les surcharges qui utilisent std::piecewise_construct_t supposent que chaque argument tuple est utilisé pour construire, pièce par pièce, un nouvel objet du type spécifié, qui deviendra l'élément de la paire.

Table des matières

Bibliothèque standard

Les types et fonctions suivants de la bibliothèque standard l'utilisent comme étiquette de désambiguïsation :

implémente un tuple binaire, c'est-à-dire une paire de valeurs
(modèle de classe)
prépare la liste d'arguments correspondant au type de construction uses-allocator requis par le type donné
(modèle de fonction)
une view consistant en une séquence générée en produisant répétitivement la même valeur
(modèle de classe) (objet de point de personnalisation)

Exemple

#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);
}

Sortie :

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

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement corrigé
LWG 2510 C++11 le constructeur par défaut était non-explicite, ce qui pouvait entraîner une ambiguïté rendu explicite

Voir aussi

construit une nouvelle paire
(fonction membre publique de std::pair<T1,T2> )