static_assert 中的 decltype
为什么类定义中的 this (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;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
static_assert
工作正常,是你的代码从不断言。模板 struct X 定义
low
和high
类型为IntT
。无论它们具有什么值,它们都是相同的类型。当您实例化结构体 (
X x
) 时,您是在告诉编译器IntT
的类型是char 并为
low
赋予值1
,为high
赋予值'a'
(即 97) 。但是,low
和high
的类型始终为char
,因此static_assert
永远不会断言。static_assert
works fine, is your code that never assert.The template
struct X
defineslow
andhigh
as of typeIntT
. They are both the same type, whatever values they have.When you instantiate the struct (
X<char,1,'a'> x
) you are telling the compiler that the type ofIntT
ischar
and are giving tolow
the value1
and tohigh
the value'a'
(i.e. 97). However, the type oflow
andhigh
is alwayschar
so thestatic_assert
will never assert.