我对std::is_const
将指针标识const
为非const
. 我自己的实现is_const
完全一样。我不确定为什么要<T>
在版本上选择更通用的模板结构<const T>
。gcc4.7 和 clang3.1-svn 都表现出相同的行为。谁能解释发生了什么?代码如下:
#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