3338. Rename default_constructible to default_initializable

Section: 18.4.12 [concept.default.init] Status: C++20 Submitter: Casey Carter Opened: 2019-11-18 Last modified: 2021-06-06

Priority: 0

View all other issues in [concept.default.init].

View all issues with C++20 status.

Discussion:

WG21 merged P1754R1 "Rename concepts to standard_case for C++20" into the working draft as LWG Motion 11 in 2019 Cologne. That proposal contains editorial instructions to rename what was the DefaultConstructible concept:

IF LWG3151 ACCEPTED:
  default_initializable
ELSE
  default_constructible

Notably LWG 3151 "ConvertibleTo rejects conversions from array and function types" is not the intended issue number, LWG 3149 "DefaultConstructible should require default initialization" is. It was made clear during discussion in LEWG that 3149 would change the concept to require default-initialization to be valid rather than value-initialization which the is_default_constructible trait requires. LEWG agreed that it would be confusing to have a trait and concept with very similar names yet slightly different meanings, and approved P1754R1's proposed renaming.

LWG 3149 was moved to "Ready" but not approved by WG21 until Belfast — after the application of P1754R1 to the working draft — so this renaming has not happened, but the rationale remains valid.

[2019-11-30 Issue Prioritization]

Status to Tentatively Ready and priority to 0 after eight positive votes on the reflector.

Proposed resolution:

This wording is relative to N4835.

  1. Change the stable name "[concept.defaultconstructible]" to "[concept.default.init]" and retitle "Concept default_constructible" to "Concept default_initializable". Replace all references to the name default_constructible with default_initializable (There are 20 occurrences).