title: When is a variable odr-used in C++14?
body: <p>The C++14 draft (N3936) states in §3.2/3:</p>
  
  <blockquote>
    <p>A variable x whose name appears as a potentially-evaluated expression ex is odr-used unless applying the lvalue-to-rvalue conversion (4.1) to x yields a constant expression (5.19) that does not invoke any non-trivial functions and, if x is an object, ex is an element of the set of potential results of an expression e, where either the lvalue-to-rvalue conversion (4.1) is applied to e, or e is a discarded-value expression (Clause 5).</p>
  </blockquote>
  
  <p>This doesn't make any sense to me: If an expression <code>e</code> is a <em>discarded-value expression</em> depends on the context, in which <code>e</code> is used. Every expression used in an <em>expression-statement</em> (§6.2) is a <em>discarded-value expression</em>. If the <em>lvalue-to-rvalue conversion</em> is applied to <code>e</code> also depends on the context <code>e</code> is used in.</p>
  
  <p>Moreover, what does it mean for an expression to be in the set of <em>potential results</em> of another expression. One needs a notion of equality of expressions to be able to determine membership of a set. But we don't have <em>referential transparency</em>, so I cannot see how this could be achieved.</p>
  
  <p>Why was this changed from C++11 to C++14? And how should this be interpreted? As it stands, it doesn't make sense.</p>