|
Boost : |
Subject: [boost] cannot pass objects of non-POD type âclass boost::detail::shared_countâ through â...â; call will abort at runtime
From: Dave Steffen (dave.steffen_at_[hidden])
Date: 2009-09-16 18:09:59
Hi Folks
[ Sorry if this gets posted twice; my company email server changed my
email address, and I think my first post got bounced. Argh.]
Just tried to compile my project with GCC 4.3 and Boost 1.40. (It
compiles and works just fine with Boost 1.38.)
As part of a home-built thread-locking shared pointer thing, we have
this code:
/// Constructor from pointer to complete type
template<class Y>
explicit shared_locking_ptr( Y * p ): px( p ), pn( p ) // Y must be
complete
{
boost::detail::sp_enable_shared_from_this( pn, p, p );
}
which now produces this result:
../util/thread/shared_locking_ptr.hpp:57:9: warning: cannot pass objects of
non-POD type âclass boost::detail::shared_countâ through â...â; call will
abort at runtime
In Boost 1.38, the relevent code in shared_ptr.hpp was this AFAICT:
#ifdef _MANAGED
[ ... ]
#else // _MANAGED
[...]
inline void sp_enable_shared_from_this( shared_count const & /*pn*/, ... )
{
}
#endif // _MANAGED
In 1.40, it's been changed to
#ifdef _MANAGED
[...]
#else // _MANAGED
inline void sp_enable_shared_from_this( ... )
{
}
#endif // _MANAGED
Does anyone know why the change?
Has anybody else seen this problem?
It seems to me that GCC is correct, and that although it's an empty
function so it doesn't matter anyway, the earlier version is
preferable.
Alternately, does anyone know of a way to silence GCC's warning?
-- Dave Steffen, Ph.D - Software Engineer Numerica Corporation (www.numerica.us <http://www.numerica.us/> ) 4850 Hahns Peak Drive, Suite 200 Loveland, Colorado 80538 main (970) 461-2000 x 227 direct (970) 612-2327 fax (970) 461-2004 Email: dave.steffen_at_[hidden]
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk