Normalnie, jeśli potrzebuję wykryć, czy typ to const
, po prostu używam boost::is_const
. Podczas próby wykrycia stałej typu zagnieżdżonego wpadłem jednak w kłopoty. Rozważmy następujące cechy szablonu, który specjalizuje się w const typów:Wykrywanie konstytutywności typu zagnieżdżonego
template <class T>
struct traits
{
typedef T& reference;
};
template <class T>
struct traits<const T>
{
typedef T const& reference;
};
Problemem jest to, że boost::is_const
nie wydaje się, aby wykryć, że traits<const T>::reference
jest rodzajem const
.
Na przykład:
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;
This wyjścia: false false
Dlaczego nie wyjście false true
?
s/is_cost/is_const / –