http://llvm.org/bugs/show_bug.cgi?id=20407
Richard Smith <[email protected]> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution|--- |INVALID --- Comment #6 from Richard Smith <[email protected]> --- Oh, I see. Yes, I can reproduce the crash; it's a bug in your code. This: std::initializer_list<std::pair<std::string, int>> values({{"0", 0}, {"1", 1}, {"2", 2}}); ... creates a temporary std::initializer_list object (the {...}), then passes it as an argument to the constructor of 'values'. The underlying array is not lifetime-extended, so you're referring to an element of the array after it's destroyed. Deleting the parens results in the array being lifetime-extended, so it works. Think of it like this: struct init_list { std::pair<std::string, int> (&&values)[2]; }; init_list values(init_list{{{"0", 0}, {"1", 1}, {"2", 2}}}); // does not lifetime-extend array temporary init_list values{{{"0", 0}, {"1", 1}, {"2", 2}}}; // lifetime-extends array temporary -- You are receiving this mail because: You are on the CC list for the bug.
_______________________________________________ LLVMbugs mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs
