title: Unspecified evaluation order of stringize operators
body: <p>Unary operators are typically parsed with higher precedence than binary operators, and when scanning left-to-right a prefix operator will be found first. So why is the order of evaluation of stringize (<code>#</code>) operators unspecified with respect to concatenation (<code>##</code>) operators? Does order of evaluation mean something different from precedence in the context of [cpp.stringize] §16.3.2?</p>
  
  <p>(The preprocessor has no side effects, so technically it has no such thing as order of evaluation.)</p>
  
  <p>And how does the text "replaced by a single character string literal preprocessing token that contains the spelling of the preprocessing token sequence for the corresponding argument" jibe with other precedence, given that any alternative would stringize the result of concatenation, not the argument per se?</p>
  
  <p>Does any implementation do something funny, or could the order of evaluation text be safely removed and replaced with "The <code>#</code> operator has higher precedence than the <code>##</code> operator"?</p>
  
  <p>This question is cross-posted to the std-discussion mailing list, but please prefer to reply here.</p>
  
  <p>Note: I plan to draft an official proposal to revise this part of the C++ specification, so please share your knowledge! The underlying motivation is to make the preprocessor more deterministic.</p>