language-lawyer 相关问题

有关编程语言和环境的正式或权威规范的复杂性的问题。

Java 中交集类型的价值是什么?

我不明白Java语言规范中的这段话: JLS 4.9: 交集类型的值是那些作为值的对象 所有类型 Ti 的 1 ≤ i ≤ n。 至...

回答 1 投票 0

std::construct_at 和对象生命周期?

我正在审查我建议在编译时为非默认可构造对象初始化 std::array 的代码:https://stackoverflow.com/a/78676552/21691539 在第二个版本中我正在做: //

回答 1 投票 0

“\x{01}”在 C++ 中是什么意思?

代码如下: #包括 int main() { std::istringstream iss{"\x{01}"}; } 使用 CLang 和 GCC 可以正常编译,但不能使用 MSVC 编译(请参阅演示)。 这是什么...

回答 1 投票 0

ParameterSet 的 UML 所有者

根据第 9.9.16 页 ParameterSet 的描述。 190,提到的图表(特征和行为)显示,ParameterSet 可以由BehavioralFeature 或Behaviour 拥有。

回答 1 投票 0

编译器扩展的不合规性被忽视

我希望以下代码会被拒绝,因为 C++23 中不允许使用零大小的数组。然而Clang似乎对此没有任何问题,并且明目张胆地接受了。 模板 我预计以下代码会被拒绝,因为 C++23 中不允许使用零大小的数组。然而Clang似乎对此没有任何问题,并且明目张胆地接受了。 template<typename T> concept c = requires { T{}; }; static_assert(c<int[]>); // clang ok, gcc nope, msvc nope 我知道一些编译器(例如 Clang 和 GCC)实际上可以通过编译器扩展来支持零大小的数组。但是,当验证约束的语法时,我是否应该期望编译器采用这种“扩展”行为?而且,这个问题的答案对于替代失败同样正确吗? 此类场景的预期行为是否应该独立于 -pedantic 标志的使用?请注意,Clang 在启用 -pedantic-errors 标志的同时接受此代码示例。演示 程序格式错误,因为 T{} 格式错误,用 int[] 替换了 T。因此,符合标准的编译器必须发出一些诊断信息(无论是警告还是错误)。 Clang 没有这样做,所以它不符合标准。 显然,该标准对 -pedantic/-pedantic-errors 标志没有任何规定,但一般来说,如果没有它们,GCC 和 Clang 是不合格的,因为它们不会诊断使用扩展的格式不正确的程序,如果它们只是由于扩展的使用而导致格式错误。但是,据我所知,政策通常是扩展不应影响重载解析等。所以我想说,即使没有给出 -pedantic/-pedantic-errors,这也可能是编译器作者无意的。例如,如果您改为编写 static_assert(!c<int[]>);,则根据标准,该程序将是格式良好的,并且如果编译器无法编译格式良好的程序,则这将是一种更糟糕的不符合性。(顺便说一句,这里没有任何内容是特定于 C++23 的。同样的答案也适用于 C++20,并且使用空初始化器列表初始化具有未知边界的数组始终是格式错误的。)

回答 1 投票 0

编译器扩展在需求子句中被接受

我希望以下代码会被拒绝,因为 C++23 中不允许使用零大小的数组。然而Clang似乎对此没有任何问题,并且明目张胆地接受了。 模板 我预计以下代码会被拒绝,因为 C++23 中不允许使用零大小的数组。然而Clang似乎对此没有任何问题,并且明目张胆地接受了。 template<typename T> concept c = requires { T{}; }; static_assert(c<int[]>); // clang ok, gcc nope, msvc nope 我知道一些编译器(例如 Clang 和 GCC)实际上可以通过编译器扩展来支持零大小的数组。但是,当验证约束的语法时,我是否应该期望编译器采用这种“扩展”行为?而且,这个问题的答案对于替代失败同样正确吗? 此类场景的预期行为是否应该独立于 -pedantic 标志的使用?请注意,Clang 在启用 -pedantic-errors 标志的同时接受此代码示例。演示 程序格式错误,因为 T{} 格式错误,用 int[] 替换了 T。因此,符合标准的编译器必须发出一些诊断信息(无论是警告还是错误)。 Clang 没有这样做,所以它不符合标准。 显然,该标准对 -pedantic/-pedantic-errors 标志没有任何规定,但一般来说,如果没有它们,GCC 和 Clang 是不合格的,因为它们不会诊断使用扩展的格式不正确的程序,如果它们只是由于扩展的使用而导致格式错误。但是,据我所知,政策通常是扩展不应影响重载解析等。所以我想说,即使没有给出 -pedantic/-pedantic-errors,这也可能是编译器作者无意的。

回答 1 投票 0

以RMW为首的释放序列是否建立同步关系?

#包括 #包括 #包括 #包括 int main(){ std::atomic v{0}; 整数x=0; std::线程 t1([&](){ ...

回答 1 投票 0

是否使用对 C 中定义的内部数组的引用来访问外部多维数组?

考虑以下代码: 无效进程(int *); int 函数(无效){ int arr[2][2] = {{1,2},{3,4}}; 进程(arr[0]); 返回arr[1][0]; } 假设功能流程已实现...

回答 1 投票 0

非数组的 C 花括号初始化器

请考虑以下荒谬但编译的代码: int main(int argc, char *argv[]) { 无效*a,*b,*c,*d; void *the_good_array[] = { a, b, c, d }; void *the_bad_array = { a, ...

回答 2 投票 0

下标、函数调用或条件表达式是否涉及运算符的应用?

我想知道是否 下标表达式,例如 一个[0] 函数调用表达式,例如 f() 或条件表达式,例如 a==b? 42:43 涉及“下标操作...

回答 1 投票 0

下标 [] 还是条件 ?: 在语法上是一个运算符?

最新公开的 C++ 标准草案在语法上将以下内容指定为运算符或标点符号(每个运算符或标点符号都转换为单个标记): https://eel.is...

回答 1 投票 0

供应商可以在标准库头文件中添加函数而不#include其他头文件吗?

Microsoft 在 中有 std::max(),因此可以编译(Godbolt): #包括 int main() { 返回 std::max(2,3); } GCC 中没有 std::max() ,所以它有......

回答 1 投票 0

嵌套 lambda 中的本地 constexpr 隐式捕获失败无法在 msvc 上编译

在解决这个问题时,一个可能的答案暗示了嵌套的 lambda,其中内部的 lambda 隐式捕获了外部的 constexpr 局部变量。这是一个mre: int main() { []() {...

回答 1 投票 0

供应商可以在标准库头文件中包含附加函数吗?

Microsoft 在 中有 std::max(),因此可以编译(Godbolt): #包括 int main() { 返回 std::max(2,3); } GCC 中没有 std::max() ,所以它有......

回答 1 投票 0

有序超集的 UML 子集

某些属性被定义为具有 {ordered} 约束的继承属性的子集,例如: RedefinableTemplateParameter::/inheritedParameter Subsets TemplateSignature::parameter (s...

回答 1 投票 0

使用被 clang 拒绝但被 gcc 和 msvc 接受的引用类型调用时函数模板重载

我编写了以下具有重载函数模板的程序,但该程序被 clang 拒绝,并被 gcc 和 msvc 接受。演示 #包括 #包括

回答 1 投票 0

在requires表达式中捕获局部参数

与函数类似的需求表达式可以使用参数列表引入局部参数。在块作用域定义的 lambda 表达式可能具有不带初始值设定项的捕获。是不是都...

回答 1 投票 0

UML 约束

UML Constraint 类型上定义了一些 Constraints;其中, not_apply_to_self() 约束可以防止不必要的递归(这是 UML 2.5.1)。 不过,我想知道是否有

回答 1 投票 0

当不满足前导约束时,从返回类型触发静态断言

GCC 接受此代码,Clang 和 MSVC 由于断言中的静态断言失败而拒绝它。 标准怎么说? https://godbolt.org/z/PKMKzYGsc 模板 constexpr int 断言...

回答 1 投票 0

当不满足前导约束时,从返回类型触发静态断言

GCC 接受此代码,Clang 和 MSVC 由于断言中的静态断言失败而拒绝它。 标准怎么说? https://godbolt.org/z/PKMKzYGsc 模板 constexpr int 断言...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.