<meta http-equiv="content-type" content="text/html; charset=utf-8"><span class="Apple-style-span" style="border-collapse: collapse; font-family: arial, sans-serif; font-size: 14px; ">Hi Jonathan,</span><div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; font-size: 14px;"><br>
</span></font></div><div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; font-size: 14px;">Thanks for the fix and info. I'll file a bug report to the boost developers.</span></font></div>
<div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; font-size: 14px;"><br></span></font></div><div><font class="Apple-style-span" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse; font-size: 14px;">Ryuta</span></font><br>
</div><div><br><div class="gmail_quote">On Sun, Jul 17, 2011 at 11:48 PM, Jonathan Sauer <span dir="ltr"><<a href="mailto:jonathan.sauer@gmx.de">jonathan.sauer@gmx.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Hello,<br>
<div class="im"><br>
> #include <boost/thread/thread.hpp><br>
><br>
> int main()<br>
> {<br>
>   return 0;<br>
> }<br>
><br>
> Actually, clang and libc++ work perfectly fine:<br>
><br>
> [ryuta@oroppas]$ clang++ -stdlib=libc++ ./boost_thread.cpp<br>
><br>
> However, once we deploy -std=c++0x flag,<br>
><br>
> [ryuta@oroppas]$ clang++ -std=c++0x -stdlib=libc++ ./boost_thread.cpp<br>
> In file included from ./boost_thread.cpp:1:<br>
> In file included from /usr/include/boost/thread/thread.hpp:17:<br>
> /usr/include/boost/thread/pthread/thread_data.hpp:36:17: error: call to deleted constructor of 'boost::shared_ptr<boost::detail::tss_cleanup_function>'<br>
>                 func(func_),value(value_)<br>
>                 ^    ~~~~~<br>
> /usr/include/boost/smart_ptr/shared_ptr.hpp:164:25: note: function has been explicitly marked deleted here<br>
> template<class T> class shared_ptr<br>
<br>
</div>This has to do with FDIS 12.8p18 (implicitely generated copy constructors are marked as deleted if the class<br>
provides a move constructor). After adding this constructor to boost::shared_ptr, the code compiles:<br>
<br>
    shared_ptr( shared_ptr<T> const & r )<br>
    : px( r.px ), pn( <a href="http://r.pn" target="_blank">r.pn</a> ) // never throws<br>
    {<br>
    }<br>
<br>
Out-of-the-box, Boost 1.46.1's shared_ptr does not provide a copy constructor such as the one above; indeed,<br>
on line 210 of boost/smart_ptr/shared_ptr.hpp, there is the comment stating:<br>
<br>
    //  generated copy constructor, destructor are fine<br>
<br>
Boost's shared_ptr only provides the following:<br>
<br>
    template<class Y><br>
    shared_ptr( shared_ptr<Y> const & r )<br>
    : px( r.px ), pn( <a href="http://r.pn" target="_blank">r.pn</a> ) // never throws<br>
    {<br>
    }<br>
<br>
>From my reading of 12.8, this is not considered to be a copy constructor, as according to p2, only *non-template*<br>
constructors can be copy constructors. So clang tries to generate an implicit one, but that one already has been<br>
deleted by the move constructor shared_ptr provides.<br>
<br>
This is not fixed in Boost's current trunk, so I guess you should file a bug with Boost.<br>
<br>
<br>
Jonathan<br>
<br>
<br>
_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
</blockquote></div><br></div>