title: What is the evaluation strategy (eager, lazy, ...) of C++ metafunctions such as std::conditional?
body: <p>C++14 draft n4140 reads</p>
  
  <blockquote>
    <p><code>T</code> shall be an enumeration type</p>
  </blockquote>
  
  <p>for <code>template &lt;class T&gt; struct underlying_type</code>.</p>
  
  <p>How bad is it to write</p>
  
  <pre><code>std::conditional_t&lt;std::is_enum&lt;T&gt;::value, std::underlying_type_t&lt;T&gt;, foo&gt;
  </code></pre>
  
  <p>when <code>T</code> can be an arbitrary type? Will I step onto an UB and will the compiler delete my $HOME (because language lawyers say "anything can happen under an UB") ?</p>