Boost logo

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