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 是否优先于可诊断的违规行为? 的相关文章

  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么

随机推荐

  • 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 要求编译器