以下......
struct C {};
constexpr C c;
void g(C);
template<typename T>
void f(T&& t) {
g(std::forward<T>(t));
}
int main() {
f(c);
}
c
使用了吗?为什么/为什么不呢?
答案 0 :(得分:4)
通过与in Richard's answer相同的动作,我们发现违反了不的第二个条件,因此c
是 odr-used。详细情况,条件为:
[变量
x
由表达式ex
odr-used ,除非x
是一个对象,而ex
是一个元素表达式e
的潜在结果集,其中左值到右值的转换应用于e
,或e
是丢弃值表达式。
在我们的情况下,标准中的x
是c
,而ex
是id-expression c
。唯一表达式ex
是潜在结果的是id-expression ex
本身。它既不是丢弃值表达式,也不是应用了左值到右值的转换(因为它绑定到引用)。