static_assert 中的 decltype

发布于 2024-10-18 05:40:39 字数 415 浏览 5 评论 0 原文

为什么类定义中的 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;
}

Why this (static_assert) in a definition of a class doesn't work?

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

相守太难 2024-10-25 05:40:39

static_assert 工作正常,是你的代码从不断言。
模板 struct X 定义 lowhigh 类型为 IntT。无论它们具有什么值,它们都是相同的类型。
当您实例化结构体 (X x) 时,您是在告诉编译器 IntT 的类型是 char 并为 low 赋予值 1,为 high 赋予值 'a'(即 97) 。但是,lowhigh 的类型始终为 char,因此 static_assert 永远不会断言。

static_assert works fine, is your code that never assert.
The template struct X defines low and high as of type IntT. 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 of IntT is char and are giving to low the value 1 and to high the value 'a' (i.e. 97). However, the type of low and high is always char so the static_assert will never assert.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文