ポインターを非 としてstd::is_const
識別する の動作に困惑しています。私自身の の実装は、まったく同じことを行います。より一般的なテンプレート化された構造体がバージョンよりも選ばれている理由はわかりません。gcc4.7 と clang3.1-svn はどちらも同じ動作を示します。誰が何が起こっているのか説明できますか? コードを以下に示します。const
const
is_const
<T>
<const T>
#include <iostream>
#include <sstream>
#include <type_traits>
class CEmptyClass {};
namespace jbc
{
template <typename T>
struct is_const : std::false_type {};
template <typename T>
struct is_const<const T> : std::true_type {};
}
int main(int argc, char* argv[])
{
std::cout << "Is 'const CEmptyClass*' constant according to std lib : "
<< std::is_const<const CEmptyClass*>::value << std::endl;
std::cout << "Is 'const CEmptyClass*' constant according to jbc : "
<< jbc::is_const<const CEmptyClass*>::value << std::endl;
}
どちらの場合もis_const<const CEmptyClass*>::value
戻ります0