initializer_list selstam
-
hi!
Folgendes Problem:
Ich kann den vector mit Str2 nur mit { { 4 }, { 5 } } initialisieren (int x), will ich aber stattdessen ein std::string s; in der Str2 und mit { { "4" }, { "5" } } initialisieren, funktioniert das nicht! Das heißt, es gibt keinen Compilier oder Laufzeitfehler, aber wenn ich mit dem Debugger gucke (Visual Studio 2013), ist v leer (0 elemente). Mit int x; allein in der Str2 enthält v dann auch 2 Elemente! Warum geht das mit std::string nicht?
struct Str2 { int x; // Mit { { 4 }, { 5 } } initialisiert, klappt //std::string s; // Mit { { "4" }, { "5" } } initialisiert, bleibt leer! }; struct Str1 { int x; int y[2]; std::vector<Str2> v; }; const std::map<std::string, Str1> m = { { "key1", { 1, { 2, 3 }, { { 4 }, { 5 } /*{ "4" }, { "5" }*/ } } } };// x ist 1, y ist 2 und 3, und in v sollen 2 Elemente sein
-
Mist, grad guck ich mit ideone.com (gcc 4.8.1 c++11) und m["key1"].v.size() ist 2, mit std::string s; als Str2 member!
Da hab ich dann wohl nen Visual Studio bug erwischt? :(:(:(
-
Minimaleres Beispiel:
struct Str1 { std::vector<std::string> v; }; int main() { std::map<int, std::vector<std::string>> m1 = { { 1, { "4", "5" } } }; // vector.size() = 2 std::map<int, Str1> m2 = { { 1, { { "4", "5" } } } }; // v.size() = 0 :( }
-
Bin grad draufgekommen, Str1 braucht nen entsprechenden Constructor.
Warum ist das bei Visual Studio so?Str1(const std::vector<std::string>& v) : v(v) { ; }
-
Weiß dazu noch jemand mehr?
Könnte jemand nen Bugreport schreiben? Bin da nirgends angemeldet..
-
Hmm bitte voten :p
https://connect.microsoft.com/VisualStudio/feedback/details/845159/uniform-initialization-fails-on-std-map-with-struct-with-string-vector-member-as-value