title: Why is it recommended not to allow querying the contract level for C++20 Contracts?
body: <p>The current C++ draft contains, in [<a href="http://eel.is/c++draft/dcl.attr.contract#check-3" rel="nofollow noreferrer">dcl.attr.contract.check</a>] p3:</p>
  
  <blockquote>
    <p>There should be no programmatic way of setting, modifying, or querying
    the build level of a translation unit.</p>
  </blockquote>
  
  <p>I don't understand why it is recommended to not allow querying the contract level. With the current <code>assert</code> macro it is possible to detect if the assert is used via the <code>NDEBUG</code> macro.</p>
  
  <p>Querying the contract level is useful in some cases like:</p>
  
  <ul>
  <li>adding additional variables to track additional state.</li>
  <li>transforming atomic store in atomic compare exchange to read the value.</li>
  </ul>
  
  <p>what is the rationale behind recommending that querying the build level not be possible?</p>