<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 - Implement CWG 1496"
   href="https://bugs.llvm.org/show_bug.cgi?id=41915">41915</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Implement CWG 1496
          </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>Windows NT
          </td>
        </tr>

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

        <tr>
          <th>Severity</th>
          <td>enhancement
          </td>
        </tr>

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

        <tr>
          <th>Component</th>
          <td>C++'17
          </td>
        </tr>

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

        <tr>
          <th>Reporter</th>
          <td>Casey@Carter.net
          </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>Per CWG 1496 and C++17, a trivial class "...has one or more default
constructors, all of which are either trivial or deleted and at least one of
which is not deleted."

Nevertheless, clang trunk diagnoses this well-formed TU
(<a href="https://godbolt.org/z/a5Aflw">https://godbolt.org/z/a5Aflw</a>):

  template<class T>
  constexpr bool is_trivial = __is_trivially_constructible(T)
      && __is_trivially_copyable(T);

  struct NonTrivial { NonTrivial() = delete; };

  static_assert(!is_trivial<NonTrivial>); // succeeds
  static_assert(!__is_trivial(NonTrivial)); // fails (and should not)

as ill-formed since __is_trivial(NonTrivial) is incorrectly true.</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>