【发布时间】:2018-12-03 18:28:31
【问题描述】:
考虑一个简单的例子:
int foo() {
return 3;
}
template <int>
struct Bar {};
int a;
int main() {
int b;
//Bar<((void)foo(), 1)> bar1; //case 1. compilation error as expected
Bar<((void)a, 2)> bar2; //case 2. no error (long shot but `a' has a linkage so maybe expected)
Bar<((void)b, 3)> bar3; //case 3. no error ? (`b' does not have linkage)
(void)bar2;
(void)bar3;
}
【问题讨论】:
-
更简单的 MCVE 是 gcc.godbolt.org/z/1s3HFz
-
不是答案,只是怀疑:使用
(void)a, 2,编译器可以丢弃a;使用(void)foo(), 1,编译器(不包括“as-if”规则)执行非constexpr 函数并丢弃返回值。等高手,估计是foo()的执行问题。
标签: c++ c++11 language-lawyer constexpr comma-operator