Für mich ein pair
ist nur Spezialfall eines tuple
, aber folgende überrascht mich:Warum = {} Initialisierung funktioniert nicht für Tupel?
pair<int, int> p1(1, 2); // ok
tuple<int, int> t1(1, 2); // ok
pair<int, int> p2={1, 2}; // ok
tuple<int, int> t2={1, 2}; // compile error
Warum Unterschied gibt es, wenn wir {}
verwenden tuple
zu initialisieren?
versuchte ich sogar g++ -std=c++1y
aber immer noch Fehler hat:
a.cc: In function 'int main()':
a.cc:9:29: error: converting to 'std::tuple<int, int>' from initializer list would use explicit constructor 'constexpr std::tuple<_T1, _T2>::tuple(_U1&&, _U2&&) [with _U1 = int; _U2 = int; <template-parameter-2-3> = void; _T1 = int; _T2 = int]'
tuple<int, int> t2={1, 2};
^
Sie sollten in der Lage sein, 'auto t2 = tuple {1, 2}; 'zu tun, wenn Sie die Syntax der Kopierinitialisierung haben wollen. Re der Fehler, die Fehlermeldung sagt alles. –