<div dir="ltr"><span style="font-family:monospace">Compiling the following code:<br>#include <memory><br>#include <vector><br>#include <initializer_list><br><br>struct C {<br>    std::vector< std::unique_ptr<int> > vec;<br><br>    C(std::initializer_list< std::unique_ptr<int> > init)<br>    : vec(std::make_move_iterator(init.begin()),<br>          std::make_move_iterator(init.end()))<br>    {}<br>};<br><br>with clang version 3.6.0 (trunk 222993) (llvm/trunk 222992)<br>resulted in a perplexing message:<br><br>In file included from wtf.cc:1:<br>In file included from /usr/local/bin/../lib/gcc/x86_64-unknown-linux-gnu/4.9.0/../../../gcc/x86_64-unknown-linux-gnu/4.9.0/include/c++/memory:62:<br>In file included from /usr/local/bin/../lib/gcc/x86_64-unknown-linux-gnu/4.9.0/../../../gcc/x86_64-unknown-linux-gnu/4.9.0/include/c++/bits/stl_algobase.h:67:<br>/usr/local/bin/../lib/gcc/x86_64-unknown-linux-gnu/4.9.0/../../../gcc/x86_64-unknown-linux-gnu/4.9.0/include/c++/bits/stl_iterator.h:995:16: error: binding of reference to type 'unique_ptr<[2 * ...]>' to a value<br>      <div class="gmail_default" style="font-family:courier new,monospace;font-size:large;display:inline">               </div>of type 'unique_ptr<[2 * ...]>' drops qualifiers<br>      { return std::move(*_M_current); }<br>               ^~~~~~~~~~~~~~~~~~~~~~<br><br>I can see no qualifiers to be dropped<div class="gmail_default" style="font-family:courier new,monospace;font-size:large;display:inline">(although std::initializer_list gives only const access to its contents)</div><br><br><br>GCC's error message sheds a bit more light on what's wrong:<br><br>/usr/include/c++/4.8/bits/stl_iterator.h:963:37: error: invalid initialization of reference of type ‘std::move_iterator<const std::unique_ptr<int>*>::reference {aka std::unique_ptr<int>&&}’ from expression of type ‘std::remove_reference<const std::unique_ptr<int>&>::type {aka const std::unique_ptr<int>}’<br>       { return std::move(*_M_current); }<br>                                     ^</span><br><br><div class="gmail_default" style="font-family:courier new,monospace;font-size:large">Note the presence of 'const' in the GCC error message, as opposed to clang (which makes no mention of const).</div><br clear="all"><div class="gmail_default" style="font-family:courier new,monospace;font-size:large">Csaba<br></div><div class="gmail_default" style="font-family:courier new,monospace;font-size:large">(please excuse ghastly formatting by Gmail)</div><br>-- <br><div class="gmail_signature">GCS a+ e++ d- C++ ULS$ L+$ !E- W++ P+++$ w++$ tv+ b++ DI D++ 5++<br>The Tao of math: The numbers you can count are not the real numbers.<br>Life is complex, with real and imaginary parts.<br>"Ok, it boots. Which means it must be bug-free and perfect. " -- Linus Torvalds<br>"People disagree with me. I just ignore them." -- Linus Torvalds<br><br></div>
</div>