|
1
5
是的,MSVC错了。
代码格式良好似乎有悖常理,因为
那为什么允许呢?首先,非正式地考虑一下,一个表达式不是一个常量表达式,如果它的计算结果是一个本身不是常量表达式的glvalue,或者是一个在封闭表达式之外开始使用的变量( [expr.const]p2.7 ).
其次,
现在,发生的是
我们有:
所有这些都不会违反
[expr.const]p2
,因此得到的表达式实际上是一个常量表达式,用作
这些类型的表达式称为 converted constant expressions
|
|
|
2
1
MSVC在这里是不正确的,让我们从代码的简化版本开始:
移动到
我们在这里也很好。在最初的示例中,我们引用了一个模板非类型参数,该参数在常量表达式中可用,因此同样的推理也适用于该情况。的两个操作数
我们也可以看到 MSVC still treats the simplified case as ill-formed 即使叮当声和海湾合作委员会接受它。 |
|
|
3
-1
如果您声明:
演示 here .
对你来说
所以我认为所有的编译器都是对的。
1
|
|
Paul J. Lucas · _C中任意大小的原子结构体赋值? 1 年前 |
|
|
nore · 为什么C标准禁止在源文件末尾使用部分预处理令牌? 1 年前 |
|
Gene · 是否允许使用受约束的别名模板? 1 年前 |
|
|
yg-i · C的“基本执行字符集”中的字符总数究竟是多少? 1 年前 |