Date
2022-11-20.07:54:16
Message id
6991

Content

Proposed resolution (approved by CWG 2022-11-09):

Change 6.8.1 [basic.types.general] paragraph 10 as follows:

A type is a literal type if it is:

  • ...

  • a possibly cv-qualified class type (Clause 11 [class]) that has all of the following properties:

    • it has a constexpr destructor (9.2.6 [dcl.constexpr]),

    • all of its non-static non-variant data members and base classes are of non-volatile literal types, and

    • it is either

      • is a closure type (7.5.6.2 [expr.prim.lambda.closure]),

      • an aggregate type (9.5.2 [dcl.init.aggr]),

      • is an aggregate union type that has either no variant members or at least one variant member of non-volatile literal type,

      • is a non-union aggregate type for which each of its anonymous union members satisfies the above requirements for an aggregate union type, or

      • has at least one constexpr constructor or constructor template (possibly inherited (9.10 [namespace.udecl]) from a base class) that is not a copy or move constructor,.

    • if it is a union, at least one of its non-static data members is of non-volatile literal type, and

    • if it is not a union, all of its non-static data members and base classes are of non-volatile literal types.