<div style="font-size:1rem;color:rgb(49,49,49);word-spacing:1px" dir="auto">Hiya,</div><div style="color:rgb(49,49,49);word-spacing:1px" dir="auto"><br></div><div style="font-size:1rem;color:rgb(49,49,49);word-spacing:1px" dir="auto">When initialising class members with braces, it seems Clang doesn't have the same behaviour as GCC/MSVC. GCC and MSVC try to use the initializer-list-constructor if defined, where Clang appears to be using the copy-constructor.</div><div style="color:rgb(49,49,49);word-spacing:1px" dir="auto"><br></div><div style="font-size:1rem;color:rgb(49,49,49);word-spacing:1px" dir="auto">My guess is that copy elision is what might be causing this behaviour. Is it correct, or is this a bug?</div><div style="color:rgb(49,49,49);word-spacing:1px" dir="auto"><br></div><div style="font-size:1rem;color:rgb(49,49,49);word-spacing:1px" dir="auto">For the way I'm using it, the initializer-list-constructor behaves quite differently to the copy-constructor and triggered completely different behaviour between Clang and the other compilers.</div><div style="color:rgb(49,49,49);word-spacing:1px" dir="auto"><br></div><div style="font-size:1rem;color:rgb(49,49,49);word-spacing:1px" dir="auto">Super keen to hear any thoughts.<br></div><div style="color:rgb(49,49,49);word-spacing:1px" dir="auto"><br></div><div style="font-size:1rem;color:rgb(49,49,49);word-spacing:1px" dir="auto">Cheers,</div><div style="font-size:1rem;color:rgb(49,49,49);word-spacing:1px" dir="auto">Matt<br></div><div style="color:rgb(49,49,49);word-spacing:1px" dir="auto"><br></div><div style="font-size:1rem;color:rgb(49,49,49);word-spacing:1px" dir="auto">Repro case:<br></div><div style="color:rgb(49,49,49);word-spacing:1px" dir="auto"><br></div><div style="font-size:1rem;color:rgb(49,49,49);word-spacing:1px" dir="auto">struct ContainedObj {</div><span style="color:rgb(49,49,49);word-spacing:1px;background-color:rgb(255,255,255)">    ContainedObj() = default;</span><br style="color:rgb(49,49,49);word-spacing:1px"><span style="color:rgb(49,49,49);word-spacing:1px;background-color:rgb(255,255,255)">    ContainedObj(ContainedObj const& other) { std::cout << this << ": copy ctor" << std::endl; }</span><br style="color:rgb(49,49,49);word-spacing:1px"><span style="color:rgb(49,49,49);word-spacing:1px;background-color:rgb(255,255,255)">    ContainedObj(std::initializer_</span><span style="color:rgb(49,49,49);word-spacing:1px;background-color:rgb(255,255,255)">list<ContainedObj>) { std::cout << this << ": il ctor" << std::endl; }</span><br style="color:rgb(49,49,49);word-spacing:1px"><span style="color:rgb(49,49,49);word-spacing:1px;background-color:rgb(255,255,255)">};</span><br style="color:rgb(49,49,49);word-spacing:1px"><br style="color:rgb(49,49,49);word-spacing:1px"><span style="color:rgb(49,49,49);word-spacing:1px;background-color:rgb(255,255,255)">struct WithBraces {</span><br style="color:rgb(49,49,49);word-spacing:1px"><span style="color:rgb(49,49,49);word-spacing:1px;background-color:rgb(255,255,255)">    ContainedObj mContained;</span><br style="color:rgb(49,49,49);word-spacing:1px"><span style="color:rgb(49,49,49);word-spacing:1px;background-color:rgb(255,255,255)">    explicit WithBraces(ContainedObj const& contained) : mContained{contained} {}</span><br style="color:rgb(49,49,49);word-spacing:1px"><span style="color:rgb(49,49,49);word-spacing:1px;background-color:rgb(255,255,255)">};</span><br style="color:rgb(49,49,49);word-spacing:1px"><br style="color:rgb(49,49,49);word-spacing:1px"><span style="color:rgb(49,49,49);word-spacing:1px;background-color:rgb(255,255,255)">struct WithBrackets {</span><br style="color:rgb(49,49,49);word-spacing:1px"><span style="color:rgb(49,49,49);word-spacing:1px;background-color:rgb(255,255,255)">    ContainedObj mContained;</span><br style="color:rgb(49,49,49);word-spacing:1px"><span style="color:rgb(49,49,49);word-spacing:1px;background-color:rgb(255,255,255)">    explicit WithBrackets(ContainedObj const& contained) : mContained(contained) {}</span><br style="color:rgb(49,49,49);word-spacing:1px"><span style="color:rgb(49,49,49);word-spacing:1px;background-color:rgb(255,255,255)">};</span><br style="color:rgb(49,49,49);word-spacing:1px"><br style="color:rgb(49,49,49);word-spacing:1px"><span style="color:rgb(49,49,49);word-spacing:1px;background-color:rgb(255,255,255)">ContainedObj a;</span><br style="color:rgb(49,49,49);word-spacing:1px"><span style="color:rgb(49,49,49);word-spacing:1px;background-color:rgb(255,255,255)">WithBrackets b(a);</span><br style="color:rgb(49,49,49);word-spacing:1px"><span style="color:rgb(49,49,49);word-spacing:1px;background-color:rgb(255,255,255)">WithBrackets c{a};</span><br style="color:rgb(49,49,49);word-spacing:1px"><span style="color:rgb(49,49,49);word-spacing:1px;background-color:rgb(255,255,255)">WithBraces d(a);</span><br style="color:rgb(49,49,49);word-spacing:1px"><div style="font-size:1rem;color:rgb(49,49,49);word-spacing:1px" dir="auto">WithBraces e{a};</div><div style="color:rgb(49,49,49);word-spacing:1px" dir="auto"><br></div><div style="font-size:1rem;color:rgb(49,49,49);word-spacing:1px" dir="auto">Output on MSVC 2017 and g++ 6.3.0:<br></div><div style="font-size:1rem;color:rgb(49,49,49);word-spacing:1px" dir="auto">00F3FA6B: copy ctor</div><div style="font-size:1rem;color:rgb(49,49,49);word-spacing:1px" dir="auto">00F3FA5F: copy ctor</div><div style="font-size:1rem;color:rgb(49,49,49);word-spacing:1px" dir="auto">00F3F887: copy ctor</div><div style="font-size:1rem;color:rgb(49,49,49);word-spacing:1px" dir="auto">00F3FAF3: il ctor</div><div style="font-size:1rem;color:rgb(49,49,49);word-spacing:1px" dir="auto">00F3F887: copy ctor</div><div style="font-size:1rem;color:rgb(49,49,49);word-spacing:1px" dir="auto">00F3FA47: il ctor<br></div><div style="color:rgb(49,49,49);word-spacing:1px" dir="auto"><br></div><div style="font-size:1rem;color:rgb(49,49,49);word-spacing:1px" dir="auto">Clang output:</div><div style="font-size:1rem;color:rgb(49,49,49);word-spacing:1px" dir="auto">0x7ffeefbff580: copy ctor<br>0x7ffeefbff578: copy ctor<br>0x7ffeefbff570: copy ctor<br>0x7ffeefbff568: copy ctor</div>