从非 constexpr 参数创建 constexpr 数组

2023-11-30

我从中学到了here that args不是一个常量表达式. Now 我的问题是:我应该在给定的程序中修改什么,以便我能够在第一个变体中拥有 static_assert 而不会出现编译时错误。

在下面的代码中:

#include <array>

template<typename... Args>
auto constexpr CreateArrConst(Args&&... args)
{
  std::array arr
  {
      args...
  };
  //i want to have an static_assert here without error
  return arr;
}

template<typename... Args>
auto constexpr CreateArrConst_NotWorking(Args&&... args)
{
  constexpr std::array arr
  {
      args...
  };
  static_assert(arr.back() == 4);
  return arr;
}

int main() 
{
  static_assert(CreateArrConst(4).back() == 4);
  // uncomment this to reproduce compile error
  // static_assert(CreateArrConst_NotWorking(4).back() == 4);

  return 0;
}

这是重现的链接:https://godbolt.org/z/zjrP1Kvn7


您必须将参数放入模板参数中。不幸的是,它无法再推断出参数的类型:

#include <array>

template<typename T, T... args>
auto constexpr CreateArrConst()
{
  constexpr std::array arr
  {
      args...
  };
  static_assert(arr.back() == 4);
  return arr;
}

// cleaner solution requiring C++17
template<auto... args>
auto constexpr CreateArrConstCpp17()
{
  constexpr std::array arr
  {
      args...
  };
  static_assert(arr.back() == 4);
  return arr;
}

int main() 
{
  static_assert(CreateArrConst<int, 4>().back() == 4);            // <-- Works!

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

从非 constexpr 参数创建 constexpr 数组 的相关文章

  • 向 Nhibernate 发出 SQL 查询

    如何将此 SQL 查询发送给 Nhibernate SELECT Customer name FROM Company INNER JOIN Customer ON Company CompanyId Customer CompanyId
  • 如何在 C# 中从 UNIX 纪元时间转换并考虑夏令时?

    我有一个从 unix 纪元时间转换为 NET DateTime 值的函数 public static DateTime FromUnixEpochTime double unixTime DateTime d new DateTime 19
  • 如何为 C 分配的 numpy 数组注册析构函数?

    我想在 C C 中为 numpy 数组分配数字 并将它们作为 numpy 数组传递给 python 我可以做的PyArray SimpleNewFromData http docs scipy org doc numpy reference
  • 如何将 #ifdef DEBUG 添加到 Xcode?

    我的项目中有一些代码永远不应该在发布版本中使用 但在测试时很有用 我想做这样的事情 ifdef DEBUG Run my debugging only code endif 在 Xcode 4 中哪里添加 DEBUG 设置 我尝试将其放入
  • 如何重定向到另一个页面并从表中传递 url 中的参数?

    如何重定向到另一个页面并从表中传递 url 中的参数 我在龙卷风模板中创建了类似的东西 table thead tr th Username th th Nation th th Rank th th th tr thead tbody f
  • 互斥体实现可以互换(独立于线程实现)

    所有互斥体实现最终都会调用相同的基本系统 硬件调用吗 这意味着它们可以互换吗 具体来说 如果我使用 gnu parallel算法 使用openmp 并且我想让他们称之为线程安全的类我可以使用boost mutex用于锁定 或者我必须编写自己
  • XamlReader.Load 在后台线程中。是否可以?

    WPF 应用程序具有从单独的文件加载用户控件的操作 使用XamlReader Load method StreamReader mysr new StreamReader pathToFile DependencyObject rootOb
  • 如何从 .resx 文件条目获取注释

    资源文件中的字符串有名称 值和注释 The ResXResourceReader类让我可以访问名称和值 有办法看评论吗 你应该能够得到Comment via ResXDataNode class http msdn microsoft co
  • 如何访问另一个窗体上的ListView控件

    当单击与 ListView 所在表单不同的表单中的按钮时 我试图填充 ListView 我在 Form1 中创建了一个方法以在 Form2 中使用 并将参数传递给 Form1 中的方法 然后填充 ListView 当我调试时 我得到了传递的
  • 如何在 Linq 中获得左外连接?

    我的数据库中有两个表 如下所示 顾客 C ID city 1 Dhaka 2 New york 3 London 个人信息 P ID C ID Field value 1 1 First Name Nasir 2 1 Last Name U
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操
  • 上下文敏感与歧义

    我对上下文敏感性和歧义如何相互影响感到困惑 我认为正确的是 歧义 歧义语法会导致使用左推导或右推导构建多个解析树 所有可能的语法都是二义性的语言是二义性语言 例如 C 是一种不明确的语言 因为 x y 总是可以表示两个不同的事物 如下所述
  • 如何将自定义 JSON 文件添加到 IConfiguration 中?

    我正在使用 asp net Autofac 我正在尝试加载自定义 JSON 配置文件 并基于该文件创建 实例化 IConfiguration 实例 或者至少将我的文件包含到默认情况下构建的 IConfiguration asp net 中
  • 如何在 Django 模板上使用 if/else 条件?

    我将以下字典传递给渲染函数 源是字符串列表 标题是可能等于源中字符串之一的字符串 title title sources sources 在 HTML 模板中 我想完成以下几行内容 for source in sources tr td s
  • 使用 Moq 使用内部构造函数模拟类型

    我正在尝试模拟 Microsoft Sync Framework 中的一个类 它只有一个内部构造函数 当我尝试以下操作时 var fullEnumerationContextMock new Mock
  • HttpWebRequest 在第二次调用时超时

    为什么以下代码在第二次 及后续 运行时超时 代码挂在 using Stream objStream request GetResponse GetResponseStream 然后引发 WebException 表示请求已超时 我已经尝试过
  • C++ 密码屏蔽

    我正在编写一个代码来接收密码输入 下面是我的代码 程序运行良好 但问题是除了数字和字母字符之外的其他键也被读取 例如删除 插入等 我知道如何避免它吗 特q string pw char c while c 13 Loop until Ent
  • 线程和 fork()。我该如何处理呢? [复制]

    这个问题在这里已经有答案了 可能的重复 多线程程序中的fork https stackoverflow com questions 1235516 fork in multi threaded program 如果我有一个使用 fork 的
  • memset 未填充数组

    u32 iterations 5 u32 ecx u32 malloc sizeof u32 iterations memset ecx 0xBAADF00D sizeof u32 iterations printf 8X n ecx 0
  • 防止在工厂方法之外实例化对象

    假设我有一个带有工厂方法的类 class A public static A newA Some code logging return new A 是否可以使用 a 来阻止此类对象的实例化new 那么工厂方法是创建对象实例的唯一方法吗 当

随机推荐

  • 如何在 Visual Studio 中连接到 MySQL 数据源

    我用MySQL 连接器 网络通过引用程序集 MySql Data dll 并传入连接字符串来连接到我的数据库MySqlConnection 我喜欢这样 因为我不需要安装任何东西 有没有办法在 Visual Studio 2010 中 选择数
  • 为什么我会遇到找不到类异常

    我在用DeferredTextImpl类和 eclipse 似乎没有抱怨它 但是当我运行我的项目时 我得到运行时异常 Class not found exception for DeferredTextImpl 当我搜索类文件时 我发现它在
  • 如何在 Objective C 中使用 AssetLibrary 检索视频的文件大小

    我想知道如何使用 AssetLibrary 检索视频的文件大小 有人能指出我正确的方向吗 或者可能有一些代码片段 这应该会让你走上正轨 看资产库框架参考 void logVideoSizes void assetEnumerator ALA
  • 为什么 xUnit Runner 找不到我的测试

    我有一个 xUnit net 测试如下 static class MyTestClass Fact static void MyTestMethod VS 2012 的 xUnit 插件说 没有发现可以运行的测试 TestDriven ne
  • ASP.NET MVC 中的 ELMAH 和异常管理

    我正在考虑从企业库中的异常管理应用程序块转移到新的 ASP NET MVC 站点 Scott Hansleman 在 ELMAH 上的帖子引起了我的注意 但我并不完全理解这种方法 通常 我会抑制一些异常 可恢复的异常 将它们记录在中央存储库
  • 在python中读取TDMS文件如何使用tdms info命令?

    我想知道Labview生成的tdms文件的内容是什么 按照此site 我用Python写 import numpy as np from nptdms import TdmsFile from nptdms import tdms read
  • 在外部网站上自动填写和提交表格

    我想知道一个人如何自动填写多个表格 使用bot local server 使用ajax或curl在外部站点 PHP 的多个页面上 例如一个网站www abc com index php有一个表格
  • 配置.vimrc时如何映射命令键?

    我使用 mac 我想配置 vimrc 例如 map
  • 模拟时间序列

    在最近的宏观经济预测在线课程中 有一个建模练习 y t 3 0 0 55 y t 1 e t where e t 定义为 et lt c 1 2138662 0 2854597 0 5902700 0 8285463 0 9954260 0
  • n 元函数的 Uncurry

    我有一个类型级别的数字 data Z deriving Typeable data S n deriving Typeable 和 n 元函数 来自固定向量包的代码 Type family for n ary functions type
  • 如何对 data.table 中的 .SD 列进行行明智操作

    虽然我之前已经弄清楚了这一点 但我仍然发现自己在 stackoverflow 上搜索 并且无法找到 这个语法 所以 我想对 data table 列的子集进行行明智操作 使用 SD and SDcols 我永远不记得手术是否需要sapply
  • Pandas 按组计算过去 n 天内发生的事件次数

    我有按 id 发生的事件表 如何计算过去 n 天内每种事件类型在当前行之前发生的次数 例如 事件列表如下 df pd DataFrame id 1 event day 2016 01 01 event type type1 id 1 eve
  • 将 lambda 参数传递给 include 语句

    我正在使用System Data Entity命名空间 因此我可以将 lambda 表达式传递给 Linq Include 方法 public ICollection
  • 容器绑定脚本尝试从侧边栏使用 google.script.run 运行函数时出现权限错误

    我尝试在电子表格上实现侧边栏 以获取用户输入以供我的脚本使用 我无法让它成功调用任何服务器端函数 我将谷歌文档中的一个简单脚本和我读过的几个 stackoverflow 问题放在一起 但我不断收到错误 它能够打印到控制台 但尝试调用时出错日
  • Eclipse 中的 Boost 链接错误

    我一直在尝试将 boost 的线程功能包含在 Ubuntu 上的 Eclipse C 项目中 但毫无结果 到目前为止的步骤 从 boost org 下载 boost configure with libraries system threa
  • 如何正确获取使用 flex-direction:column 显示的块的实际宽度?

    例如 HTML console log container width 600px as we defined in css console log list width 600px console log box eq 1 positio
  • read() 系统调用实际读取的数据量

    假设我有一个文件 其文件描述符在 EOF 之前剩余的字节数超过 n 个字节 并且我调用了 n 个字节的 read 系统调用 该函数是否保证将 n 个字节读入缓冲区 还是可以少读点 The read系统调用保证读取您所要求的尽可能多的字符 除
  • JS:循环遍历div列表以通过onclick添加事件?

    div test div div test div div test div 如果我有一个 div 列表 并且希望在单击每个 div 时将字体大小增加到 20px 我知道我可以执行以下操作 let elements document que
  • SOLR旅游网站:关于日期查询

    我正在寻找为酒店预订网站实施 SOLR 根据位置 酒店名称 设施进行的搜索非常有效 分面也是如此 我不知道如何在给定入住和退房日期的情况下搜索酒店 例如 用户将搜索搜索查询 纽约的酒店 然后从日期选择框中选择入住日期 2012 年 2 月
  • 从非 constexpr 参数创建 constexpr 数组

    我从中学到了here that args不是一个常量表达式 Now 我的问题是 我应该在给定的程序中修改什么 以便我能够在第一个变体中拥有 static assert 而不会出现编译时错误 在下面的代码中 include