通常、タイプが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 true
?
s/is_cost/is_const / –