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




Log in to reply