昨天我装铛3.1和g ++ 4.7,并试图编译一个项目我工作。 我很惊讶地看到,它没有编译使用两种编译器。 但是,最让我惊讶的是,这个问题是在boost::shared_ptr
。
显然,由于类定义了移动构造函数/赋值运算符,拷贝构造函数被隐式删除。 所以这个代码:
#include <boost/shared_ptr.hpp>
int main() {
boost::shared_ptr<int> x;
boost::shared_ptr<int> y(x);
}
不能编译。 铛呼应此错误:
test.cpp:5:28: error: call to implicitly-deleted copy constructor of
'boost::shared_ptr<int>'
boost::shared_ptr<int> y(x);
^ ~
/usr/include/boost/smart_ptr/shared_ptr.hpp:347:5: note: copy constructor is
implicitly deleted because 'shared_ptr<int>' has a user-declared move
constructor
shared_ptr( shared_ptr && r ): px( r.px ), pn() // never throws
^
克++ 4.7提供了一个类似的错误,指的是隐式地删除构造为好。 奇怪的是, boost::shared_ptr
,实际上明确定义拷贝构造函数(升压/ smart_ptr / shared_ptr.hpp线228):
template<class Y>
#if !defined( BOOST_SP_NO_SP_CONVERTIBLE )
shared_ptr( shared_ptr<Y> const & r, typename boost::detail::sp_enable_if_convertible<Y,T>::type = boost::detail::sp_empty() )
#else
shared_ptr( shared_ptr<Y> const & r )
#endif
: px( r.px ), pn( r.pn ) // never throws
{
}
我使用升压1.48.0.2,这是相当新的。 有谁知道是怎么回事? 为什么它实际上是在定义时没有被检测到的拷贝构造函数? 这是固定在智能指针库的新版本? 我无法找到任何更新日志。