boost ::任何构造函数 - const类型重载决策

时间:2016-02-15 21:26:42

标签: c++ boost boost-any

boost :: any有一个完美的正向构造函数,声明为:

template<typename ValueType>
any(ValueType&& value
    , typename boost::disable_if<boost::is_same<any&, ValueType> >::type* = 0 // disable if value has type `any&`
    , typename boost::disable_if<boost::is_const<ValueType> >::type* = 0) // disable if value has type `const ValueType&&`
  : content(new holder< typename decay<ValueType>::type >(static_cast<ValueType&&>(value)))
{}

is_const&lt;&gt; SFINAE排除强制const类型到常规拷贝构造函数:

template<typename ValueType>
any(const ValueType & value)
  : content(new holder<
        BOOST_DEDUCED_TYPENAME remove_cv<BOOST_DEDUCED_TYPENAME decay<const ValueType>::type>::type
    >(value))
{}

常规复制构造函数如何处理const值与完全正向构造函数在is_const&lt;&gt;处理时的处理方式有何不同?排除被删除?

1 个答案:

答案 0 :(得分:0)

第一个专门用于rvalue refs(enable_if确保它)。

static_cast是使用std::move的同义词,因此它会移动。