IFNDR 是否优先于可诊断的违规行为?

2024-01-01

[简介.合规性.一般]/2 https://timsong-cpp.github.io/cppwp/n4868/intro.compliance.general#2指定编译器应如何处理给定的程序。

特别是它有两点涉及格式错误的程序。 (2.2) 要求编译器针对违反可诊断规则的情况发出至少一个诊断。 (2.3) 指出,对于违反不需要诊断的规则的程序,没有对编译器强加任何要求。

不幸的是,我认为该段落没有明确说明这两个要求之间的优先级。如果程序包含违反需要诊断的可诊断规则的情况以及违反不需要诊断的规则的情况,编译器是否需要发出诊断?

作为一个例子(被视为一个完整的单翻译单元程序):

// ill-formed, diagnostic required
int main() { using T = void&; }

// IFNDR according to [temp.res.general]/8.1 and [temp.res.general]/8.4
void f(auto) { using T = void&; }

此外,如果 IFNDR 优先,则同样的情况可能适用于通常被视为运行时 UB 的未定义行为,例如做

// always runtime undefined behavior
int main() { return *(int*)0; }

// ill-formed, diagnostic required
using T = void&;

那么从技术上来说也不需要诊断(被视为一个完整的单翻译单元程序)?


从实现质量的角度来看,我认为编译器在这种情况下应该尽可能发出诊断。

但我的印象是,该标准实际上并不要求这样做,这也是我之前读到/听到的。例如“资格”并且模板未实例化" in [一般温度响应]/8.1 https://timsong-cpp.github.io/cppwp/n4868/temp.res.general#8.1否则就没有多大意义。然而,在其他时候,该标准在似乎应该需要的情况下并不使用此类反转限定条件,例如[dcl.constexpr]/6 https://timsong-cpp.github.io/cppwp/n4868/dcl.constexpr#6.


第 2.3 节很明确 –“本文件对实施没有提出要求”。不是“除 2.2 之外的本文档”,而是“本文档”。如果存在 IFNDR 情况,则实施可以自由执行任何操作。

必要的

重写 2.2 是必要的。假设,IFNDR 情况可能会使编译偏离轨道,导致其错过确实需要诊断的格式错误的情况。 (被其他错误隐藏的错误并不是一个新概念。)这并不会使实现不合格。尽管进行了善意处理,但 IFNDR 情况的存在为实现提供了可能错过相关代码中的诊断的余地。

这确实意味着实现也有可能错过不相关代码中的诊断。那好吧。标准可以尝试区分“相关代码”和“不相关代码”,但这会是浪费精力。在某些时候,最好相信实施是出于善意,而不是过度监管。

“不需要诊断”的情况是有效的reason因为错过了诊断。如果一个实现使用它作为excuse主动省略诊断,那么它是合规的,但你应该远离。 就像您应该远离检测未定义行为并以此为借口格式化硬盘的合规实现一样。

实际的

From a 实际的但从角度来看,2.3 并不覆盖 2.2。虽然官方的说法是“不需要诊断”,但更实际的观点是“情况不需要检测”。必须检测需要诊断的情况,以便可以生成诊断。不需要执行任何特定操作的情况不需要被检测。

如果实现不尝试检测 IFNDR 情况,则它无法根据现有的 IFNDR 做出决策。也就是说,它必须对其检测到的格式错误提供诊断。这不仅仅是“执行质量”,也不仅仅是“诚信”,而是在面对未知情况时确保合规的必要条件。

如果一个实现does如果检测到 IFNDR 情况,我们就会依靠善意。

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

IFNDR 是否优先于可诊断的违规行为? 的相关文章

  • ASP.NET MVC 中的经典 ASP (C#)

    我有一个应用程序想要 最终 转换为 ASP NET MVC 我想要进行全面的服务升级 到 ASP NET 但想要使用当前的 ASP 内容来运行当前的功能 这样我就可以在对新框架进行增量升级的同时升级小部分 该站点严重依赖于不太成熟的 VB6
  • 我的线程图像生成应用程序如何将其数据传输到 GUI?

    Mandelbrot 生成器的缓慢多精度实现 线程化 使用 POSIX 线程 Gtk 图形用户界面 我有点失落了 这是我第一次尝试编写线程程序 我实际上并没有尝试转换它的单线程版本 只是尝试实现基本框架 到目前为止它是如何工作的简要描述 M
  • 为什么我不能用 `= delete;` 声明纯虚函数?

    Intro 纯虚函数使用通用语法声明 virtual f 0 然而 自 c 11 以来 有一种方法可以显式地传达non existence 特殊 成员函数的 Mystruct delete eg default constructor Q
  • 32 位应用程序的特征最大矩阵大小

    所以 我正在寻找Eigen http eigen tuxfamily org index php title Main Page当我尝试声明大于 10000x10000 的矩阵时 包崩溃 我需要声明一个像这样的矩阵 可靠地大约有 13000
  • 对齐 GridView 中的行值

    我需要在 asp net 3 5 中右对齐 gridview 列中的值 我怎样才能做到这一点
  • 显示异常时的自定义错误消息:从客户端检测到潜在危险的 Request.Form 值

    我在我的 Web 应用程序中使用 ASP NET 的登录控件 当发生此异常时 我想在标签上显示一种有趣的错误类型System Web HttpRequestValidationException A potentially dangerou
  • 从多个类访问串行端口

    我正在尝试使用串行端口在 arduino 和 C 程序之间进行通信 我对 C 编程有点陌生 该程序有多种用户控制形式 每一个都需要访问串口来发送数据 我需要做的就是从每个类的主窗体中写入串行端口 我了解如何设置和写入串行端口 这是我的 Fo
  • 如何从网站下载 .EXE 文件?

    我正在编写一个应用程序 需要从网站下载 exe 文件 我正在使用 Visual Studio Express 2008 我正在使用以下代码 private void button1 Click object sender EventArgs
  • Qt 创建布局并动态添加小部件到布局

    我正在尝试在 MainWindow 类中动态创建布局 我有四个框架 它们是用网格布局对象放置的 每个框架都包含一个自定义的 ClockWidget 我希望 ClockWidget 对象在调整主窗口大小时相应地调整大小 因此我需要将它们添加到
  • 基于xsd模式生成xml(使用.NET)

    我想根据我的 xsd 架构 cap xsd 生成 xml 文件 我找到了这篇文章并按照说明进行操作 使用 XSD 文件生成 XML 文件 https stackoverflow com questions 6530424 generatin
  • 生产代码中的 LRU 实现

    我有一些 C 代码 需要使用 LRU 技术实现缓存替换 目前我知道两种实现LRU缓存替换的方法 每次访问缓存数据时使用时间戳 最后比较替换时的时间戳 使用缓存项的堆栈 如果最近访问过它们 则将它们移动到顶部 因此最后底部将包含 LRU 候选
  • 如何在c#中的内部类中访问外部类的变量[重复]

    这个问题在这里已经有答案了 我有两个类 我需要声明两个类共有的变量 如果是嵌套类 我需要访问内部类中的外部类变量 请给我一个更好的方法来在 C 中做到这一点 示例代码 Class A int a Class B Need to access
  • 尚未处理时调用 Form 的 Invoke 时出现 ObjectDisposeException

    我们得到一个ObjectDisposedException从一个电话到Invoke在尚未处理的表格上 这是一些演示该问题的示例代码 public partial class Form2 Form void Form2 Load object
  • 耐用功能是否适合大量活动?

    我有一个场景 需要计算 500k 活动 都是小算盘 由于限制 我只能同时计算 30 个 想象一下下面的简单示例 FunctionName Crawl public static async Task
  • 当前的 x86 架构是否支持非临时加载(来自“正常”内存)?

    我知道有关此主题的多个问题 但是 我没有看到任何明确的答案或任何基准测量 因此 我创建了一个处理两个整数数组的简单程序 第一个数组a非常大 64 MB 第二个数组b很小 无法放入 L1 缓存 程序迭代a并将其元素添加到相应的元素中b在模块化
  • 运算符“==”不能应用于“int”和“string”类型的操作数

    我正在编写一个程序 我想到了一个数字 然后计算机猜测了它 我一边尝试一边测试它 但我不断收到不应该出现的错误 错误是主题标题 我使用 Int Parse 来转换我的字符串 但我不知道为什么会收到错误 我知道它说 不能与整数一起使用 但我在网
  • 我在在线程序挑战编译器中遇到演示错误

    include
  • 使用 C# 从 DateTime 获取日期

    愚蠢的问题 给定日期时间中的日期 我知道它是星期二 例如我如何知道它的 tue 2 和 mon 1 等 Thanks 您正在寻找星期几 http msdn microsoft com en us library system datetim
  • 使用 Crypto++ 获取 ECDSA 签名

    我必须使用 Crypto 在变量中获取 ECDSA 签名 我在启动 SignMessage 后尝试获取它 但签名为空 我怎样才能得到它 你看过 Crypto wiki 吗 上面有很多东西椭圆曲线数字签名算法 http www cryptop
  • 匿名结构体作为返回类型

    下面的代码编译得很好VC 19 00 23506 http rextester com GMUP11493 标志 Wall WX Za 与VC 19 10 25109 0 标志 Wall WX Za permissive 这可以在以下位置检

随机推荐

  • Django Forms DateInput 小部件未填充

    我有一个 django 编辑表单 其中包含模型中的许多字段 包括一些日期字段 为了获得合适的格式 我使用了 DateInput 小部件 不幸的是 当我们编辑对象时 所有其他字段都已经填充了现有数据 但日期除外 日期处于其初始状态 dd mm
  • 如何在anaconda中安装包?

    我想将音乐包添加到 anaconda 解释器中 我使用的是 ubuntu 14 04 64 位 我从anaconda云下载了music21 1 9 3 tar gz 我将其解压到 anaconda3 pkgs ext installer p
  • 将日期输入类型默认值设置为今天、明天、任意日期?

    在 HTML5 中 没有在 value 属性中指定 今天 的本机方法 这是我非常喜欢的 jQuery 代码 如何扩展此代码来设置 今天的日期到var today 明天的日期到var tomorrow 计算得出的任何日期var anydate
  • 如何在java中创建枚举对象

    我试图定义枚举类 Item 的三个不同对象 其权重在 0 到 20 之间以及每个项目的描述 这是我的代码 public enum Item Three Items with descriptions GOLD 2 gold SILVER 1
  • 如何使用Java中的文件中的特定行号读取特定行?

    在Java中 有什么方法可以从文件中读取特定行吗 例如 读取第 32 行或任何其他行号 对于小文件 String line32 Files readAllLines Paths get file txt get 32 对于大文件 try S
  • 如何在AWS EMR上重新启动yarn

    我正在使用 Hadoop 2 6 0 emr 4 2 0图像 我做了一些改变yarn site xml并希望重新启动纱线以使更改生效 有一个命令可以用来执行此操作吗 编辑 2017 年 10 月 26 日 AWS 官方已在此处发布了有关如何
  • Angular 5(Karma / Jasmine 测试)- 使用模拟后端来模拟错误消息的错误响应

    我不太明白 MockBackend 功能是如何工作的描述在这里 https angular io api http testing MockBackend 我对 Angular 完全陌生 我想编写一些测试用例 以确保当后端发生服务器错误时
  • 用于平铺渲染的 OpenGL 矩阵设置

    看完之后datenwolf 2011 年关于 OpenGL 中基于图块的渲染设置的回答 https stackoverflow com questions 6490728 capture snapshot of opengl window
  • 使用 Monkey Test 时如何防止输入设置

    我在 Android 设备 LG G4 中对我的应用程序进行了猴子测试 命令是 adb shell monkey p package name v 2000 但它可能会意外进入设置并更改我的设备的默认值 如何预防呢 Monkey支持黑名单
  • 使用 KVO 更改属性时发送通知

    我有一个名为myName在我的课堂上 比如 property nonatomic strong NSString myName 我需要在以下情况时发送通知myName属性的值发生改变 现在我正在做类似的事情 void setMyName N
  • 如何在设计时进行调试?

    我使用 UserControl 创建了一个自定义 ListView 当鼠标进入 ColumnHeader 时 它应该在设计时改变颜色 它有效 但我需要调试代码 如何在设计时调试代码 See 演练 在设计时调试自定义 Windows 窗体控件
  • 可以删除Android依赖吗?

    我有一个应用程序 到目前为止一直工作和编译得很好 但是 当我转到 导出 时 会自动添加 Android 依赖项 这会引发 转换为 Dalvik 格式失败 错误 1 我对此进行了研究 我知道这是因为 Android 依赖项添加了重复文件 我目
  • 加入具有不同排序规则问题的列

    我正在使用 SQL Server 2005 我有两个表 它们使用不同的排序规则 不允许连接具有不同排序规则的表中的列 例如不允许使用以下 SQL select table1column1 table2column2 from 我的问题是 为
  • C++/SDL2——渲染一个圆[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我用 SDL2 画一个实心圆 方向正确吗 我认为使用参数方程和趋于零的半径是可行的 但在处理器使用方面似乎效率很低 任何其他想法都非常感谢 提前
  • 如何从 Ruby on Rails 应用程序中的 OAuth::Unauthorized 异常中拯救出来?

    如何挽救 Ruby on Rails 应用程序中 OmniAuth 引发的 OAuth Unauthorized 异常 显然是这样的 rescue from OAuth Unauthorized with gt unauthorized 不
  • java nio 直接缓冲区上的压缩

    gzip 输入 输出流不在 Java 直接缓冲区上运行 是否有直接在直接缓冲区上运行的压缩算法实现 这样就不会产生将直接缓冲区复制到 java 字节数组进行压缩的开销 我无意转移你的问题 但这就是really你的程序中有一个好的优化点吗 您
  • 在 C# 中获取属性值(反射)的最快方法

    我想知道从对象的属性获取值 仅针对此问题 的最快方法是什么 经过一番搜索后 我在这个网站上看到了 MarkGravell 的帖子 他写了这段代码 using System using System Reflection using Syst
  • new Integer(123)、Integer.valueOf(123) 和 just 123 之间的区别

    最近我看到这样的代码 Java myMethod new Integer 123 我目前正在重构一些代码 声纳工具中有一个提示 使用这样的东西对内存更友好 myMethod Integer valueOf 123 但是在这种情况下 我认为使
  • 来自主线程的 VTK 窗口线程,C++

    我刚刚学习 VTK 和 C GUI 编程 希望有一个简单的问题 主应用程序在应用程序中的某个时刻启动渲染的窗口 希望在显示 VTK 窗口时主线程能够继续 是否有特定的方法可以将 VTK 窗口作为线程启动 我的环境是 Linux 可以使用 b
  • IFNDR 是否优先于可诊断的违规行为?

    简介 合规性 一般 2 https timsong cpp github io cppwp n4868 intro compliance general 2指定编译器应如何处理给定的程序 特别是它有两点涉及格式错误的程序 2 2 要求编译器