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
|
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
rainer · 后台插入程序的初始化 1 年前 |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |