Namespaces
Variants

std::piecewise_construct, std::piecewise_construct_t

Depuis fr.cppreference.net
 
 
Bibliothèque d'utilitaires
Support linguistique
Support des types (types de base, RTTI)
Macros de test de fonctionnalités de la bibliothèque (C++20)
Utilitaires de programme
Fonctions variadiques
Support des coroutines (C++20)
Support des contrats (C++26)
Comparaison à trois voies
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Utilitaires généraux
Opérateurs relationnels (obsolète en C++20)
 
 
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 classe étiquette vide utilisé pour lever l'ambigüité entre différentes fonctions qui prennent deux arguments 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 (piecewise), un nouvel objet d'un type spécifié, qui deviendra l'élément de la paire.

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> )