constexpr 与未触及的非 constexpr 参数:谁是正确的,clang 还是 gcc?

2024-01-22

我有 4 个测试用例,我相信它们都是有效的:

constexpr int f(int const& /*unused*/){
    return 1;
}

void g(int const& p){
    constexpr int a = f(p); // clang error, gcc valid

    int v = 0;
    constexpr int b = f(v); // clang valid, gcc valid

    int const& r = v;
    constexpr int c = f(r); // clang error, gcc error

    int n = p;
    constexpr int d = f(n); // clang valid, gcc valid
}

int main(){
    int p = 0;
    g(p);
}

Clang 和 GCC 仅在第一个测试用例上有所不同。

我使用 clang 4 和 5 (20170319) 以及 GCC 7.0.1 (20170221) 进行了测试。

如果我是对的,它将大大简化 static_assert 中 boost::hana 的使用。


[表达式.const]/2 https://timsong-cpp.github.io/cppwp/expr.const#2:

一种表达e is a 核心常量表达式除非 评估e,遵循抽象机的规则,将 评估以下表达式之一:

  • [...]
  • an id-表达式引用引用类型的变量或数据成员,除非该引用具有先前的初始化并且 任何一个

    • 它用常量表达式初始化或

    • 它的生命周期开始于评估e;

  • [...]

这两个条件都不满足p or r。因此既不f(p) nor f(r)是一个核心常量表达式,因此两者都不能用于初始化constexpr多变的。叮当是正确的。

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

constexpr 与未触及的非 constexpr 参数:谁是正确的,clang 还是 gcc? 的相关文章

  • 与 for_each 或 std::transform 一起使用时,如何调用 C++ 函子构造函数

    我以前从未使用过 C 函子 所以我只是想了解它们是如何工作的 例如假设我们有这个函子类 class MultiplyBy private int factor public MultiplyBy int x factor x int ope
  • C# SmtpClient编程中如何设置带有中文的附件文件名?

    我的代码如下 ContentType ct new ContentType ct MediaType MediaTypeNames Application Octet ct Name 这是一个很长的中文文件名希望能用它在附件名中 Doc A
  • 是否需要销毁运算符删除的形式才能真正销毁对象?

    C 20 添加了破坏形式operator delete区别于std destroying delete t范围 它导致delete表达式在调用之前不再销毁对象operator delete 目的是在显式调用对象的析构函数和释放内存之前 允许
  • 是否可以使用 http url 作为 DirectShow .Net 中源过滤器的源位置?

    我正在使用 DirectShow Net 库创建一个过滤器图 该过滤器图通过使用 http 地址和 WM Asf Writer 来流式传输视频 然后 在网页上 我可以使用对象元素在 Windows Media Player 对象中呈现视频源
  • EntityHydrate 任务失败

    我最近安装了 Visual Studio 11 Beta 和 Visual Studio 2010 之后 我无法在 Visual Studio 2010 中构建依赖于 PostSharp 的项目 因此我卸载了 Visual Studio 1
  • 2个对象,完全相同(除了命名空间)c#

    我正在使用第三方的一组网络服务 但遇到了一个小障碍 在我手动创建将每个属性从源复制到目标的方法之前 我想我应该在这里寻求更好的解决方案 我有 2 个对象 一个是 Customer CustomerParty 类型 另一个是 Appointm
  • JavaScript 错误:MVC2 视图中的条件编译已关闭

    我试图在 MVC2 视图页面中单击时调用 JavaScript 函数 a href Select a JavaScript 函数 function SelectBenefit id code alert id alert code 这里 b
  • Linux 上的 RTLD_LOCAL 和dynamic_cast

    我们有一个由应用程序中的一些共享库构成的插件 我们需要在应用程序运行时更新它 出于性能原因 我们在卸载旧插件之前加载并开始使用新插件 并且只有当所有线程都使用旧插件完成后 我们才卸载它 由于新插件和旧插件的库具有相同的符号 我们dlopen
  • LinkLabel 无下划线 - Compact Framework

    我正在使用 Microsoft Compact Framework 开发 Windows CE 应用程序 我必须使用 LinkLabel 它必须是白色且没有下划线 因此 在设计器中 我将字体颜色修改为白色 并在字体对话框中取消选中 下划线
  • 如何防止 Blazor NavLink 组件的默认导航

    从 Blazor 3 1 Preview 2 开始 应该可以防止默认导航行为 https devblogs microsoft com aspnet asp net core updates in net core 3 1 preview
  • Unity c# 四元数:将 y 轴与 z 轴交换

    我需要旋转一个对象以相对于现实世界进行精确旋转 因此调用Input gyro attitude返回表示设备位置的四元数 另一方面 这迫使我根据这个四元数作为默认旋转来计算每个旋转 将某些对象设置为朝上的简单方法如下 Vector3 up I
  • 让网络摄像头在 OpenCV 中工作

    我正在尝试让我的网络摄像头在 Windows 7 64 位中的 OpenCV 版本 2 2 中捕获视频 但是 我遇到了一些困难 OpenCV 附带的示例二进制文件都无法检测到我的网络摄像头 最近我发现这篇文章表明答案在于重新编译一个文件 o
  • MySQL 连接器 C++ 64 位在 Visual Studio 2012 中从源代码构建

    我正在尝试建立mySQL 连接器 C 从源头在视觉工作室2012为了64 bit建筑学 我知道这取决于一些boost头文件和C 连接器 跑步CMake生成一个项目文件 但该项目文件无法编译 因为有一大堆非常令人困惑的错误 这些错误可能与包含
  • .NET 和 Mono 之间的开发差异

    我正在研究 Mono 和 NET C 将来当项目开发时我们需要在 Linux 服务器上运行代码 此时我一直在研究 ASP NET MVC 和 Mono 我运行 Ubuntu 发行版 想要开发 Web 应用程序 其他一些开发人员使用 Wind
  • C++ 指针引用混淆

    struct leaf int data leaf l leaf r struct leaf p void tree findparent int n int found leaf parent 这是 BST 的一段代码 我想问一下 为什么
  • 如何编写一个接受 int 或 float 的 C 函数?

    我想用 C 语言创建一个扩展 Python 的函数 该函数可以接受 float 或 int 类型的输入 所以基本上 我想要f 5 and f 5 5 成为可接受的输入 我认为我不能使用if PyArg ParseTuple args i v
  • 如何从 Windows Phone 7 模拟器获取数据

    我有一个 WP7 的单元测试框架 它在手机上运行 结果相当难以阅读 因此我将它们写入 XDocument 我的问题是 如何才能将这个 XML 文件从手机上移到我的桌面上 以便我可以实际分析结果 到目前为止 我所做的是将 Debugger B
  • 如何组合两个 lambda [重复]

    这个问题在这里已经有答案了 可能的重复 在 C 中组合两个 lambda 表达式 https stackoverflow com questions 1717444 combining two lamba expressions in c
  • Streamwriter 覆盖 txt 文件中的文本

    有没有什么方法可以重新打开流写入器而不创建新的写入对象 因为此时 当调用 WriteOdd 时 streamwriter 正在覆盖在它之前调用的 WriteEven public void WriteEven StreamWriter wr
  • winform c# 中的弹出窗口

    我正在开发一个需要弹出窗口的项目 但问题是我还希望能够通过表单设计器在此弹出窗口中添加文本框等 所以基本上我有一个按钮 当您单击它时 它将打开我在表单设计器中设计的另一个窗口 我一直在谷歌搜索 但还没有找到我需要的东西 所以我希望你们能帮助

随机推荐

  • 需要一个需要大写或小写字母的 JavaScript 正则表达式

    我有一个正则表达式 现在只允许小写字母 我需要一个需要小写或大写字母的正则表达式 a z 你无法从这里到达那里 我有一个正则表达式 现在只允许小写字母 我需要一个需要小写或大写字母的正则表达式 a z 不幸的是 它是完全不可能使用 Java
  • 有没有办法在新窗口中更改 pdf 的标题?

    有没有办法在新窗口中更改 pdf 的标题 我试过了 prntWin window open data application pdf base64 response prntWin document title Testing And th
  • 如何从 Sharepoint 资源库获取文件名

    如何从 SharePoint 2013 资源库获取图像的文件名 我正在尝试编写一个 JQuery REST 片段来根据图像的其他列值搜索库中的图像子集并显示它们 我会用FileLeafRef如果是文档库 但我在资源库中找不到等效字段 到目前
  • 计算文本文件中的行数(java)

    下面是我如何计算文本文件中的行数 只是想知道还有其他方法可以做到这一点吗 while inputFile hasNext a inputFile nextLine inputFile close 我正在尝试将数据输入到数组中 我不想读取文本
  • Java:为什么常量池只为字符串值维护?

    我的问题是关于java实习和常量池 Java维护一个常量池java lang String 巧妙地使用 JVM 内存 并且这样做 java lang String 是不可变的 那么为什么java不维护其他不可变类型的常量池 比如Long I
  • moment 与 date-fns 区域设置日期格式

    我正在我们的应用程序的上下文中评估 DateFns 和 Moment 并发现 DateFns 中似乎有一个重要的遗漏 在 Moment 中 区域设置支持允许您格式化日期或时间的区域设置正确的表示形式 例如 日期格式 LL 和 L 将为英语区
  • 如何明智地处理版本控制和核心数据模型?

    当我们使用 git 将 Core Data 模型文件置于版本控制之下时 我们总是会遇到合并更改的可怕时间 我们发现避免手动合并更改的唯一可靠方法是在团队之间进行沟通以阻止访问当一个人做出必要的改变并推动时 然后是下一个人 依此类推 当然有更
  • Django 管理 - 排序 list_filter

    我在 list filter 中有 版本 我希望最新版本位于 全部 列表项之后 在这种情况下 如何对列表进行降序排序 全部 3 6 99 108 3 6 99 107 定义模型中的默认顺序Meta class class MyModel m
  • 很少有刚体导致子弹物理缓慢

    我目前正在将物理引擎 BulletPhysics 集成到我的图形引擎中 在此之前 我使用 SAP 和 Narrowphase 算法实现了简单的碰撞系统 SAP 和 Narrowphase 的时间成本为 3ms 大约有 300 个对象 由于我
  • 相同的 typeid 名称但不是 std::is_same

    使用 C gcc 4 8 3 我有 2 种类型 T1 and T2 具有奇怪的性质typeid T1 name and typeid T2 name 是相同的但是std is same
  • 在Jmeter中提取数组中的json

    如何提取json对象name从下面json data in Jmeter name x age 50 gender Female 我正在做这个 name在 JsonPath Extractor 中 它在我提取到的变量中给出了这个 name
  • 通过模板渲染时材质列表项看起来不同

    我有一个角度材质列表 我想根据外部提供的模板来渲染项目 然而 这似乎影响了mat list item组件呈现内容 特别是matLine孩子们 按如下方式显式定义项目渲染可以按预期工作
  • TCP 与 UDP - 什么是 TCP 连接? [复制]

    这个问题在这里已经有答案了 TCP 连接到底是什么 据我所知 从客户端到服务器没有物理连接 此连接是否只是客户端的套接字与服务器在三次握手后创建的新套接字链接 此后 一旦建立了 连接 连接两端的套接字就知道将其数据包发送到哪里 除了与 TC
  • 声明一个未知大小的数组

    这不是特定于任何编程语言的 问题是 在 n 个数字的数组中查找指定值的索引 现在我的问题是 在下面的代码中你能声明一个数组吗 int n read n int array n 或者这是允许的 int n array n read n 我认为
  • android api 29 上的 adb remount 是否损坏?

    adb remount从模拟器运行时 无法在 api 29 上正常工作 该命令在已尝试过的所有其他模拟器 18 23 25 26 27 和 28 上运行良好 有什么想法可能是为什么吗 Skip mounting partition prod
  • 空数组作为 PostgreSQL 数组列默认值

    我在 postgresql 9 4 数据库中定义了一个数组字段 character varying 64 我可以有一个空数组吗 作为该字段的默认值 设置的语法是什么 如果仅设置括号 则会出现以下错误 SQL error ERROR synt
  • 尽管有两组使用 ggplot2,但具有单回归线的散点图

    我想用 ggplot2 生成一个散点图 其中包含穿过所有数据点 无论它们来自哪个组 的回归线 但同时通过分组变量改变标记的形状 下面的代码生成组标记 但出现两条回归线 每组一条 model lm df ParamY ParamX p1 lt
  • getSupportActionBar() 使用 Robolectric 返回 null

    当我通过基于 Roboelectric 和 JUnit 的测试用例调用 getSupportActionBar 方法时 该方法返回 null 这是我的简单测试用例 package com mobile test import static
  • Wildfly 上的 Db2 驱动程序/数据源设置:无法加载驱动程序 [com.ibm] 的模块

    我想在我的 Wildfly 服务器 Wildfly 8 0 0 Final 和 8 1 0 上配置 db2 的数据源 但这样做遇到了一些问题 我的研究告诉我这是一个两步过程 将驱动程序作为模块安装在 JBOSS HOME modules c
  • constexpr 与未触及的非 constexpr 参数:谁是正确的,clang 还是 gcc?

    我有 4 个测试用例 我相信它们都是有效的 constexpr int f int const unused return 1 void g int const p constexpr int a f p clang error gcc v