我对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
。
std::is_const
在将一个const指针识别为非const时的行为感到困惑。代码中没有const指针,只有指向const的非const指针。 - David Rodríguez - dribeas