|
Boost Users : |
Subject: [Boost-users] boost::any constructors
From: David (list_at_[hidden])
Date: 2016-02-15 16:31:29
Hi,
boost::any has a perfect forward constructor declared as:
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)))
{}
The is_const SFINAE exclusion forces const types to the regular copy
constructor:
template<typename ValueType>
any(const ValueType & value)
: content(new holder<
BOOST_DEDUCED_TYPENAME remove_cv<BOOST_DEDUCED_TYPENAME
decay<const ValueType>::type>::type
>(value))
{}
What is different about how the regular copy constructor treats a constant
value than what the perfect forward construct would do if the is_const
exclusion were removed?
Thanks,
David
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net