This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 112e. See for the official list.


2542. Is a closure type a structural type?

Section:  [expr.prim.lambda.closure]     Status: DR     Submitter: Zhihao Yuan     Date: 2022-03-01

[Accepted as a DR at the June, 2023 meeting.]


  template <auto V>
  void foo() {}

  void bar() {
    foo<[i = 3] { return i; }>();

It is unclear whether the data members of a closure type are public or private. This makes a difference, since it affects whether a closure type is a structural type or not (13.2 [temp.param] paragraph 7:

A structural type is one of the following:

Proposed resolution (approved by CWG 2023-03-30):

Change in [expr.prim.lambda.closure] paragraph 2 as follows:

... The closure type is not an aggregate type (9.4.2 [dcl.init.aggr]) and not a structural type (13.2 [temp.param]). ...