<div dir="ltr">On Thu, Jun 20, 2013 at 9:53 AM, Seth Cantrell <span dir="ltr"><<a href="mailto:seth.cantrell@gmail.com" target="_blank">seth.cantrell@gmail.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">C++11 [macro.names] 17.6.6.3.1 p2 states<br>
<br>
> A translation unit shall not #define or #undef names lexically identical to keywords, to the identifiers listed in Table 3, or to the attribute-tokens described in 7.6.<br>
<br>
As I understand it this means a program that does this is ill-formed,<br>
with a diagnostic required. Clang does not produce any diagnostics for<br>
such defines/undefs. Am I correct that a diagnostic is required? This<br>
doesn't sound like it would be too difficult to implement. Is there a<br>
reason not to have clang produce a warning for this (one that wouldn't<br>
trigger in system headers)?<br></blockquote><div><br></div><div>Given that the requirement is buried in the C++ standard library section, and there isn't any particular reason to ban #define'ing a keyword for translation units which don't include the standard library, I would assume that it's only meant to apply to translation units which include the standard library.  (I could be wrong, though.)<br>
<br></div><div>-Eli<br></div></div></div></div>