Title
Default argument instantiation for member functions of templates
Status
c++23
Section
13.9.2 [temp.inst]
Submitter
Maxim Kartashev

Created on 2015-01-19.00:00:00 last changed 17 months ago

Messages

Date: 2023-02-10.23:01:52

Proposed resolution (approved by CWG 2023-02-06):

Change in 13.9.2 [temp.inst] paragraph 12 as follows:

If a templated function template f is called in a way that requires a default argument to be used, the dependent names are looked up, the semantics constraints are checked, and the instantiation of any template used in the default argument is done as if the default argument had been an initializer used in a function template specialization with the same scope, the same template parameters and the same access as that of the function template f used at that point, except that the scope in which a closure type is declared (7.5.6.2 [expr.prim.lambda.closure]) --- and therefore its associated namespaces --- remain as determined from the context of the definition for the default argument. This analysis is called default argument instantiation. The instantiated default argument is then used as the argument of f.
Date: 2023-02-15.00:00:00

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

Default argument instantiation is described in 13.9.2 [temp.inst] paragraph 12, and although instantiation of default arguments for member functions of class templates is mentioned elsewhere a number of times, this paragraph only describes default argument instantiation for function templates.

History
Date User Action Args
2023-07-16 13:00:43adminsetstatus: open -> c++23
2023-07-16 13:00:43adminsetstatus: dr -> open
2023-02-18 18:43:04adminsetstatus: ready -> dr
2023-02-10 23:01:52adminsetmessages: + msg7190
2023-02-10 23:01:52adminsetstatus: tentatively ready -> ready
2023-02-07 06:06:05adminsetstatus: review -> tentatively ready
2022-11-20 07:54:16adminsetstatus: open -> review
2022-02-18 07:47:23adminsetstatus: drafting -> open
2015-01-19 00:00:00admincreate