Если вы пробовали то же самое с указателями, как в
boost::is_same<int const *, boost::add_const<int *>::type>::value
вы обнаружите, что это также ложь, поскольку boost::add_const<int *>::type
генерирует тип int *const
, который явно не совпадает с int const *
.
По существу, то же самое происходит со ссылками, то есть boost::add_const<int &>::type
- это попытка сгенерировать int &const
. Формально тип int &const
недопустим в C ++ - квалификация cv не может быть применена к самой ссылке. Таким образом, boost::add_const
в этом случае предназначен для запрета, а это означает, что boost::add_const<int &>::type
снова генерирует int &
.