<br><br><div class="gmail_quote">On Wed, May 9, 2012 at 3:27 PM, David Blaikie <span dir="ltr"><<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="HOEnZb"><div class="h5">On Wed, May 9, 2012 at 11:18 AM, Fernando Pelliccioni<br>
<<a href="mailto:fpelliccioni@gmail.com">fpelliccioni@gmail.com</a>> wrote:<br>
> Hi all,<br>
><br>
> Is it this behavior correct ?<br>
><br>
> //Code ----------------------<br>
> #include <initializer_list><br>
> #include <iostream><br>
> #include <string><br>
> #include <vector><br>
><br>
> using namespace std;<br>
><br>
> void foo( initializer_list<typename vector<string>::value_type> list )<br>
> {<br>
>     for (auto& item : list)<br>
>     {<br>
>         cout << item << endl;<br>
>     }<br>
> }<br>
><br>
> int main( /* int argc, char* argv[] */ )<br>
> {<br>
>     foo( { {"k0", "v0"}, {"k1", "v1"} } );<br>
>     return 0;<br>
> }<br>
><br>
> //End code ----------------------<br>
><br>
><br>
> $ clang++ --version<br>
> clang version 3.1 (trunk 155038)<br>
> Target: i386-pc-linux-gnu<br>
> Thread model: posix<br>
><br>
> $ clang++ -std=c++11 initializer_list_test.cpp<br>
> $ ./a.out<br>
> k0<br>
> k1<br>
><br>
> ------------------------------------------<br>
><br>
> I would have expected that the initializer_list be deduced to something like<br>
> an associative container (a compile time error).<br>
<br>
</div></div>I believe you're calling the std::string(Iterator begin, Iterator end)<br>
constructor. As you could with this code:<br>
<br>
std::string s{"k0", "v0"};<br>
<br>
(or even C++03 code: std::string s("k0", "v0"); )<br></blockquote><div><br></div><div><br></div><div>Oh, you're right!</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<br>
You probably got luck with the string constant layout & ran into "v0"<br>
from "k0" - but I suspect the length of your strings is 3, not 2<br>
(including the null character between "v0" and "k0")<br>
</blockquote></div><div><br></div><div><br></div><div>But... I'm  concerned about the ambiguous resolution in this case ...</div><div><br></div><div><br></div><div><div><div>//Code ----------------------</div><div>#include <initializer_list></div>
<div>#include <iostream></div><div>#include <string></div><div>#include <vector></div><div>#include <map></div><div><br></div><div>using namespace std;</div><div><br></div><div>void foo( initializer_list<typename vector<string>::value_type> list )</div>
<div>{</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>for (auto& item : list)</div><div><span class="Apple-tab-span" style="white-space:pre">  </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>cout << item << endl;</div>
<div><span class="Apple-tab-span" style="white-space:pre">      </span>}</div><div>}</div><div><br></div><div>void foo( initializer_list<typename map<string, string>::value_type> list )</div><div>{</div><div><span class="Apple-tab-span" style="white-space:pre">     </span>for (auto& item : list)</div>
<div><span class="Apple-tab-span" style="white-space:pre">      </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>cout << item.first << endl;</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>}</div>
<div>}</div><div><br></div><div>int main( /* int argc, char* argv[] */ )</div><div>{</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>foo( { {"k0", "v0"}, {"k1", "v1"} } );</div>
<div><span class="Apple-tab-span" style="white-space:pre">      </span>return 0;</div><div>}</div><div><br></div><div>//End code ----------------------</div></div></div><div><br></div><div><br></div><div>It seems that no solution.</div>
<div><br></div><div>Regards,</div><div>Fernando.</div>