<html>
    <head>
      <base href="https://bugs.llvm.org/">
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - Only first destructor is considered when constraints are used"
   href="https://bugs.llvm.org/show_bug.cgi?id=46269">46269</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Only first destructor is considered when constraints are used
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>clang
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>trunk
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Linux
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>normal
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>C++2a
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedclangbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>kacper.slominski72@gmail.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>blitzrakete@gmail.com, erik.pilkington@gmail.com, llvm-bugs@lists.llvm.org, richard-llvm@metafoo.co.uk
          </td>
        </tr></table>
      <p>
        <div>
        <pre>When there are multiple destructors constrained with a requires clause, only
the first one is considered, like in the following code:

template <bool B>
struct A {
    ~A() requires (B) { }
    ~A() requires (!B) { }
};

A<false> x;

The compiler reports the following error:

<source>:7:10: error: invalid reference to function '~A': constraints not
satisfied
A<false> x;
         ^
<source>:3:20: note: because 'false' evaluated to false
    ~A() requires (B) { }
                   ^

The compiler prematurely reports an error about an invalid reference to the
destructor because the constraint on the first variant was not satisfied,
without checking the second variant.

The same code compiles with GCC without any problems.</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>