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;处理时的处理方式有何不同?排除被删除?
答案 0 :(得分:0)
第一个专门用于rvalue refs(enable_if
确保它)。
static_cast是使用std::move
的同义词,因此它会移动。