title: rule for :: operator in c++
body: <p>I think that the <code>::</code> operator can be unary in the case of accessing the global scope. In all other cases <code>::</code> is treated as a binary operator, and the evaluation rule for the <code>::</code> operator in the case of <code>N1::N2::N3::n</code> is equivalent to the following:</p>
  
  <pre><code>((N1::N2)::N3)::n // Error: ::n has not been declared
  </code></pre>
  
  <p>But that line doesn't compile. It is very curious. There is not any information in the standard about the evaluation of <code>nested-name-specifier</code>. It would be natural if the evaluation of <code>nested-name-specified</code> is equivalent to <code>qualified/unqualified-id</code>, <strong>but it does not say this anywhere in the standard.</strong> So can we assume that evaluation of a <code>nested-name-specifier</code> is implementation-dependent?</p>