J'ai essayé de faire std::pair
avec ce style :
#include <iostream>
struct A {
A() noexcept {
std::cout << "Created\n";
}
A(const A&) noexcept {
std::cout << "Copy\n";
}
A(A&&) noexcept {
std::cout << "Move\n";
}
};
int main() {
std::pair<A, A> a{ {},{} };
return 0;
}
et obtenu une telle sortie:
Created
Created
Copy
Copy
à la place de
Created
Created
Move
Move
Mais si je définis mon type d'objet anonyme (par exemple std::pair<A, A> a{A{}, A{}}
)
ou utilisez std::make_pair<A, A>({}, {})
j'obtiens le bon résultat.
std::pair
doit utiliser std::forward<U1>
et std::forward<U2>
pour initialiser les objets, donc je pense que ma paire utilise un mauvais constructeur. Pourquoi?