有一段代码:
int x = 0;
const int y = 0;
decltype(auto) z = true ? x : y;
static_assert(std::is_same_v<const int&, decltype(z)>);
根据[expr.cond],第二个操作数
x
隐式转换为const int&
,而第三个操作数y
是const int
类型,与const int&
不同,所以程序应该是格式错误的。
显然我错了,但我不知道错在哪里?或者说,确定表达式类型为
const int&
的具体过程是什么?
当然
y
是const int
类型,但是它不会出现在assert表达式中;这有什么不妥的地方?根据引用文档中的4.1,整个条件表达式是引用类型,因此z
被声明为引用,满足断言。