odr使用转发的constexpr参数?

时间:2015-01-08 18:21:27

标签: c++ c++14

以下......

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使用了吗?为什么/为什么不呢?

1 个答案:

答案 0 :(得分:4)

通过与in Richard's answer相同的动作,我们发现违反了的第二个条件,因此c odr-used。详细情况,条件为:

  

[变量x由表达式ex odr-used ,除非x是一个对象,而ex是一个元素表达式e的潜在结果集,其中左值到右值的转换应用于e,或e是丢弃值表达式。

在我们的情况下,标准中的xc,而ex是id-expression c。唯一表达式ex是潜在结果的是id-expression ex本身。它既不是丢弃值表达式,也不是应用了左值到右值的转换(因为它绑定到引用)。