19 #include <boost/mpl/assert.hpp> 
   23    template<
class V, 
class LkT> 
inline typename unique_ptr<V, LkT>::atomic_ptr_t
 
   25       atomic_ptr_t tmp(
nullptr);
 
   26       tmp.swap(
this->data_);
 
   30    template<
class V, 
class LkT> 
inline void 
   36    template<
class V, 
class LkT> 
inline void 
   41    template<
class V, 
class LkT>
 
   42    template<
class V1> 
inline void 
   44       BOOST_MPL_ASSERT((
std::is_base_of<value_type, V1>));
 
   48    template<
class V, 
class LkT>
 
   49    template<
class V2, 
class LkT2> 
inline void 
   51       BOOST_MPL_ASSERT((
std::is_base_of<value_type, V2>));
 
   55    template<
class V, 
class LkT> 
inline constexpr 
   60    template<
class V, 
class LkT>
 
   65       BOOST_MPL_ASSERT((
std::is_base_of<value_type, V1>));
 
   68    template<
class V, 
class LkT> 
inline 
   71       BOOST_MPL_ASSERT((
std::is_base_of<value_type, 
typename atomic_ptr_t::value_type>));
 
   75    template<
class V, 
class LkT>
 
   76    template<
class V1, 
template<
class> 
class At>
 
   80       BOOST_MPL_ASSERT((
std::is_base_of<value_type, V1>));
 
   82          assert(
dynamic_cast<V1 *>(ptr.get()));
 
   84          assert(
dynamic_cast<value_type *>(data_.get()));
 
   88    template<
class V, 
class LkT> 
inline constexpr 
   90    : data_(d.release()) {
 
   93    template<
class V, 
class LkT>
 
   97    : data_(d.release()) {
 
   98       BOOST_MPL_ASSERT((
std::is_base_of<value_type, V1>));
 
  104    template<
class V, 
class LkT> 
inline constexpr 
  106    : data_(s.release()) {
 
  109    template<
class V, 
class LkT>
 
  110    template<
typename V2, 
class LkT2> 
inline 
  112    : data_(s.release()) {
 
  113       BOOST_MPL_ASSERT((
std::is_base_of<value_type, V2>));
 
  116    template<
class V, 
class LkT> 
inline 
  118       atomic_ptr_t tmp(
nullptr);
 
  119       tmp.swap(
this->data_);
 
  125    template<
class V, 
class LkT>
 
  126    template<
typename V2, 
class LkT2> 
inline void 
  128       BOOST_MPL_ASSERT((
std::is_base_of<value_type, V2>));
 
  133    template<
class V, 
class LkT> 
inline void 
  139    template<
class V, 
class LkT> 
constexpr inline bool 
  141       return (data_.get() && s.data_.get()) ? (*data_.get()<*s.data_.get()) : 
false;
 
  143    template<
class V, 
class LkT> 
constexpr inline bool 
  145       return !((data_<s.data_) || (s.data_<data_));
 
  147    template<
class V, 
class LkT> 
inline constexpr bool 
  151    template<
class V, 
class LkT> 
constexpr inline 
  153       return dynamic_cast<value_type 
const *>(data_.get())!=
nullptr;
 
  155    template<
class V, 
class LkT> 
constexpr inline bool 
  157       return (data_!=s.data_) && (s.data_<data_);
 
  160    template<
class V, 
class LkT> 
constexpr inline typename unique_ptr<V, LkT>::atomic_ptr_t 
const &
 
  164    template<
class V, 
class LkT> 
inline typename unique_ptr<V, LkT>::atomic_ptr_t &
 
  168    template<
class V, 
class LkT> 
constexpr inline typename unique_ptr<V, LkT>::value_type 
const &
 
  170       assert(
dynamic_cast<value_type 
const *>(data_.get()));
 
  173    template<
class V, 
class LkT> 
inline typename unique_ptr<V, LkT>::value_type &
 
  175       assert(
dynamic_cast<value_type *>(data_.get()));
 
  178    template<
class V, 
class LkT> 
constexpr inline typename unique_ptr<V, LkT>::value_type 
const *
 
  182    template<
class V, 
class LkT> 
inline typename unique_ptr<V, LkT>::value_type *
 
  187    template<
class V, 
class LkT> 
inline tstring 
  190       os<<
"data_="<<data_.get();
 
  191       if (
LIKELY(
dynamic_cast<value_type *>(data_.get()))) {
 
  192          os<<
", data: "<<data_->to_string()
 
  193             <<
", type: "<<ppd::api_threading_traits<ppd::platform_api, ppd::sequential_mode>::demangle_name(
typeid(unique_ptr));