为什么这个(static_assert)在一个类的定义中不起作用?
template<class IntT, IntT low = IntT(), IntT high = IntT()>
struct X
{
static_assert(std::is_same<decltype(low),decltype(high)>::value,"Different types not allowed");
};
int _tmain(int argc, _TCHAR* argv[])
{
int low, high;
X<char,1,'a'> x;//HERE I SHOULD GET ERROR
cout << sizeof(x);
return 0;
}
答案 0 :(得分:4)
static_assert
工作正常,你的代码永远不会断言。
模板struct X
定义low
和high
,类型为IntT
。它们都是相同类型,无论它们具有什么价值。
当您实例化结构(X<char,1,'a'> x
)时,您告诉编译器IntT
的类型是char
并且正在向low
提供值1
并且high
值'a'
(即97)。但是,low
和high
的类型始终为char
,因此static_assert
永远不会断言。