初始化器列表上的 static_assert::size()

2024-06-18

Why is std::initializer_list<_E>::size不允许在static_assert,即使它被声明为constexpr在我的 libstdc++ (v. 4.6) 中?

例如,以下代码:

template<class T, int Length>
class Point
{
  public:
    Point(std::initializer_list<T> init)
    {
      static_assert(init.size() == Length, "Wrong number of dimensions");
    }
};

int main()
{
  Point<int, 3> q({1,2,3});

  return 0;
}

给出以下错误:

test.C: In constructor ‘Point<T, Length>::Point(std::initializer_list<_Tp>) [with T = int, int Length = 3]’:
test.C:60:26:   instantiated from here
test.C:54:7: error: non-constant condition for static assertion
test.C:54:73:   in constexpr expansion of ‘init.std::initializer_list<_E>::size [with _E = int, std::initializer_list<_E>::size_type = long unsigned int]()’
test.C:54:7: error: ‘init’ is not a constant expression

请注意,这对于一个简单的示例来说效果很好:

class A
{
  public:
    constexpr int size() { return 5; }
};

int main()
{
  A a;
  static_assert(a.size() == 4, "oh no!");

  return 0;
}

“初始化列表”只是可怕的拼凑。

Don't:

#include <initializer_list>

template<typename T>
void Dont(std::initializer_list<T> list) { // Bad!
    static_assert(list.size() == 3, "Exactly three elements are required.");
}

void Test() { Dont({1,2,3}); }

Do:

template<typename T, std::size_t N>
void Do(const T(&list)[N]) { // Good!
    static_assert(N == 3, "Exactly three elements are required.");
}

void Test() { Do({1,2,3}); }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

初始化器列表上的 static_assert::size() 的相关文章

随机推荐

  • 如何在 AngularJS 中从 ng-include 切换控制器值?

    我正在使用 AngularJS 我有一个header html我已经使用 ng include 将该 html 页面合并到另一个 html 中 另外 我有一个下拉列表header html我希望显示所选值 从下拉列表中 列表 我怎样才能做到
  • Galera 集群问题

    我想在我们的生产环境中使用Galera集群 但我有一些顾虑 每个表必须至少定义一个显式主键 每个表必须运行在InnoDB或XtraDB存储引擎下 分批处理您的大额交易 例如 不要让一个事务插入 100 000 行 而是将其分成更小的块 例如
  • IllegalStateException:预期配置 ':module:debugFeatureCompileClasspath' 仅包含一个文件,但是,它包含 2 个文件

    我正在使用带有即时应用程序和穿戴应用程序的多功能Android应用程序 在这里我能够成功运行我的应用程序但在期间出现以下错误构建 APK 或重建项目 java lang IllegalStateException Expected conf
  • 如何达到AWS Lambda并发执行限制?

    UPDATE 下面的原始测试代码基本上是正确的 但在 NodeJS 中 各种 AWS 服务的设置应该根据以下内容略有不同 SDK link https docs aws amazon com sdk for javascript v2 de
  • dplyr 将字符串拆分为逗号分隔的列表

    我正在尝试使用 dplyr 将字符串拆分为逗号分隔的字符串 但运气不佳 dat lt data frame key 1 4 labels c a ab abc b 我试图将标签列设置为 c a a b a b c b 我已经尝试了以下所有变
  • 陷入了 React useEffect 的一系列变化

    我正在反应中创建一个表单生成器 在一个简单的文本字段上 我需要 Change currentValue When currentValue已更改 验证它 验证完成后 发出一个事件 有效或无效 这是我的代码 const TextInput p
  • 如何使用空手道工具比较 2 个 JSON 对象

    URL 1 gt post 请求 gt JSON 响应 1 URL 2 gt post 请求 gt JSON 响应 2 如何比较响应 1 和响应 2 响应 2 将具有额外的属性 因此不能直接使用 match 命令 响应 1 姓名 你好 国家
  • nginx 获取静态文件失败,返回 404

    我现在正在 ubuntu 12 上部署带有 nginx 和 Gunicorn 的 django 应用程序 我配置nginx虚拟主机文件如下 server listen 80 server name mydomain com access l
  • 如何将 Xrm.EntityCollection 转换为列表?

    概述 我正在编写 FetchXML 查询以返回 Dynamics 2015 在线 CRM 实例中禁用邮箱的用户 现在我已经到了需要将查询结果绑定到ListView 的阶段 该项目正在使用Dynamics SDK 2015 库 https w
  • 扑。是否可以更改 TextFormField errorText 填充?

    我在用着TextFormField with OutlineInputBorder 我需要里面的文本在右侧和左侧有填充 为此 我正在使用 contentPadding const EdgeInsets symmetric vertical
  • Spring WebSocket 简单示例 - java.lang.IllegalStateException:意外使用调度程序

    我正在尝试在 Spring 中实现一个不使用 STOMP 的 WebSocket 服务器 请参考这篇文章 http www devglan com spring boot spring websocket integration examp
  • 如何找到多个列中的最小值

    我在我的 DB 3 col 中有一个值 我想在所有这些值中找到一个值 如下所述 表名 MyTable id col1 col2 col3 1 200 300 400 2 100 150 300 3 800 102 20 4 80 80 0
  • Laravel 5.0,env() 在并发请求期间返回 null

    问题是当我尝试使用获取配置变量时env setting or Config get setting 有时会返回 null 出于测试原因 我创建了一条简单的路线 Route get test function env env SETTING
  • php 中的 cpu_get_usage ?

    我创建了一个基准类 允许用户插入例如 timer gt checkpoint 1 检查一些代码的时间 内存消耗等 如果她 他想测试它 她 他必须在代码末尾插入 result timer gt result 这会向公共函数 result 提供
  • 创建电子书阅读应用程序的教程 - epub 文件格式 [重复]

    这个问题在这里已经有答案了 我正在制作一个电子书阅读应用程序 因为我想执行一些操作 例如更改文本颜色 字体 选择文本等 我知道 iphone os 4 0 和 ipad 现在支持 epub 文件格式 但我不知道如何创建此类应用程序 如果有人
  • 用于多行字符串的 ECMAScript 正则表达式

    我正在为我的应用程序编写加载过程 它涉及从文件中读取数据并创建具有适当属性的适当对象 该文件由以下格式的连续条目 以换行符分隔 组成 OBJECT TYPE
  • 在 Java 中向上转换或移位时抑制符号扩展

    我感觉这是一个相当微不足道的问题 但我被难住了 在我的应用程序中 我使用一对整数在查找表中键入内容 我认为将两个 int 连接成一个 long 并使用单个 long 作为键会更容易 来自 C 语言背景 我希望这样的事情能起作用 int a
  • 为别名命令添加“git help”?

    我已经实现了一个 Git 命令并使用 git 别名将其连接到 Git 但是有没有办法连接 Git 帮助 我在 Windows 上运行 如果我发出git help mycmd我收到一个弹出窗口 告诉我 Git 找不到 git mycmnd h
  • 从另一台设备访问 Azure 模拟器

    我有两个不同的项目 Windows Phone 8 应用程序 我正在真实的物理开发设备上运行 Azure 云服务 其中包含一个简单的 WebRole 端点 其中包含 ASP NET MVC WebAPI 我的目标很简单 使用从真实设备运行的
  • 初始化器列表上的 static_assert::size()

    Why is std initializer list lt E gt size不允许在static assert 即使它被声明为constexpr在我的 libstdc v 4 6 中 例如 以下代码 template