title: What does the "__cplusplus" macro expand to?
body: <ul>
  <li><p>What does the C++ macro <code>__cplusplus</code> contain and expand to?</p>
  </li>
  <li><p>Does the macro <code>__cplusplus</code> always, even in oldest C++ implementation, contain and expand to a <em>numeric</em> value?</p>
  </li>
  <li><p>Is it safe to use <code>#if __cplusplus</code>
  or should we use instead of that <code>#ifdef __cplusplus</code>?</p>
  </li>
  </ul>
  <hr />
  <h2 id="conclusion-added-later-ehb1">Conclusion <sup>(added later)</sup></h2>
  <p>From comments and accepted answer:</p>
  <ul>
  <li><p><code>__cplusplus</code> expands to a number representing the standard's version, except pre-standard C++ in the early 90s (which simply expanded to <code>1</code>).</p>
  </li>
  <li><p>Yes, even in oldest C++ implementation (expands to a numeric value).</p>
  </li>
  <li><p>No, <code>#ifdef</code> should be used when header is shared with C-language (because some C-compilers will warn when <code>#if</code> checks undefined macro).</p>
  </li>
  </ul>