<html>
    <head>
      <base href="https://bugs.llvm.org/">
    </head>
    <body><span class="vcard"><a class="email" href="mailto:saar@raz.email" title="Saar Raz <saar@raz.email>"> <span class="fn">Saar Raz</span></a>
</span> changed
          <a class="bz_bug_link 
          bz_status_RESOLVED  bz_closed"
   title="RESOLVED FIXED - SFINAE leaks through requires expression requirement"
   href="https://bugs.llvm.org/show_bug.cgi?id=44674">bug 44674</a>
          <br>
             <table border="1" cellspacing="0" cellpadding="8">
          <tr>
            <th>What</th>
            <th>Removed</th>
            <th>Added</th>
          </tr>

         <tr>
           <td style="text-align:right;">Resolution</td>
           <td>---
           </td>
           <td>FIXED
           </td>
         </tr>

         <tr>
           <td style="text-align:right;">Status</td>
           <td>NEW
           </td>
           <td>RESOLVED
           </td>
         </tr></table>
      <p>
        <div>
            <b><a class="bz_bug_link 
          bz_status_RESOLVED  bz_closed"
   title="RESOLVED FIXED - SFINAE leaks through requires expression requirement"
   href="https://bugs.llvm.org/show_bug.cgi?id=44674#c4">Comment # 4</a>
              on <a class="bz_bug_link 
          bz_status_RESOLVED  bz_closed"
   title="RESOLVED FIXED - SFINAE leaks through requires expression requirement"
   href="https://bugs.llvm.org/show_bug.cgi?id=44674">bug 44674</a>
              from <span class="vcard"><a class="email" href="mailto:saar@raz.email" title="Saar Raz <saar@raz.email>"> <span class="fn">Saar Raz</span></a>
</span></b>
        <pre>The overload of std::to_address has a deduced return type, so when it is
referenced from the requires expression, even though it is in an unevaluated
context, the body of the function is instantiated in order to deduce the return
type, which triggers the error down the line.

My first comment is incorrect and indeed 
```
template<typename T> int foo() { return T::value; }

template<typename T> concept C = requires { foo<T>(); }

static_assert(!C<int>);
```
Should (and does) not give a hard error.
This should give a hard error and is analogous to the case we see here:
```
template<typename T> auto foo() { return T::value; }

template<typename T> concept C = requires { foo<T>(); }

static_assert(!C<int>);
```</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>