通常、タイプがであるかどうかを検出する必要がある場合は、const
を使用しますboost::is_const
。しかし、ネストされた型の定数を検出しようとすると問題が発生しました。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
ですか?