[cfe-dev] Compiling boost with -std=c++0x (and -stdlib=libc++)

Ryuta Suzuki ryuuta at gmail.com
Sun Jul 17 22:19:04 PDT 2011


Hi Jonathan,

Thanks for the fix and info. I'll file a bug report to the boost developers.

Ryuta

On Sun, Jul 17, 2011 at 11:48 PM, Jonathan Sauer <jonathan.sauer at gmx.de>wrote:

> Hello,
>
> > #include <boost/thread/thread.hpp>
> >
> > int main()
> > {
> >   return 0;
> > }
> >
> > Actually, clang and libc++ work perfectly fine:
> >
> > [ryuta at oroppas]$ clang++ -stdlib=libc++ ./boost_thread.cpp
> >
> > However, once we deploy -std=c++0x flag,
> >
> > [ryuta at oroppas]$ clang++ -std=c++0x -stdlib=libc++ ./boost_thread.cpp
> > In file included from ./boost_thread.cpp:1:
> > In file included from /usr/include/boost/thread/thread.hpp:17:
> > /usr/include/boost/thread/pthread/thread_data.hpp:36:17: error: call to
> deleted constructor of
> 'boost::shared_ptr<boost::detail::tss_cleanup_function>'
> >                 func(func_),value(value_)
> >                 ^    ~~~~~
> > /usr/include/boost/smart_ptr/shared_ptr.hpp:164:25: note: function has
> been explicitly marked deleted here
> > template<class T> class shared_ptr
>
> This has to do with FDIS 12.8p18 (implicitely generated copy constructors
> are marked as deleted if the class
> provides a move constructor). After adding this constructor to
> boost::shared_ptr, the code compiles:
>
>    shared_ptr( shared_ptr<T> const & r )
>    : px( r.px ), pn( r.pn ) // never throws
>    {
>    }
>
> Out-of-the-box, Boost 1.46.1's shared_ptr does not provide a copy
> constructor such as the one above; indeed,
> on line 210 of boost/smart_ptr/shared_ptr.hpp, there is the comment
> stating:
>
>    //  generated copy constructor, destructor are fine
>
> Boost's shared_ptr only provides the following:
>
>    template<class Y>
>    shared_ptr( shared_ptr<Y> const & r )
>    : px( r.px ), pn( r.pn ) // never throws
>    {
>    }
>
> >From my reading of 12.8, this is not considered to be a copy constructor,
> as according to p2, only *non-template*
> constructors can be copy constructors. So clang tries to generate an
> implicit one, but that one already has been
> deleted by the move constructor shared_ptr provides.
>
> This is not fixed in Boost's current trunk, so I guess you should file a
> bug with Boost.
>
>
> Jonathan
>
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20110718/edc89d2a/attachment.html>


More information about the cfe-dev mailing list