Обычно, если мне нужно определить, является ли тип const
, я просто использую boost::is_const
.Тем не менее, я столкнулся с проблемой при попытке обнаружить константу вложенного типа.Рассмотрим следующий шаблон характеристик, который специализирован для константных типов:
template <class T>
struct traits
{
typedef T& reference;
};
template <class T>
struct traits<const T>
{
typedef T const& reference;
};
Проблема в том, что boost::is_const
, похоже, не обнаруживает, что traits<const T>::reference
является const
типом.
Например:
std::cout << std::boolalpha;
std::cout << boost::is_const<traits<int>::reference>::value << " ";
std::cout << boost::is_const<traits<const int>::reference>::value << std::endl;
Это выводит: false false
Почему не выводится false true
?