source_location::current()
(DE 169)Section: 17.8.2.2 [support.srcloc.cons] Status: C++20 Submitter: Jens Maurer Opened: 2020-02-13 Last modified: 2021-02-25
Priority: 2
View all issues with C++20 status.
Discussion:
Addresses DE 169
The expectation of the note that a default argument expression involving current() causes a source_location to be constructed that refers to the site of a function call where that default argument is needed has no basis in normative text. In particular, 9.2.3.6 paragraph 5 seems to imply that the name "current" and its semantics are bound where it appears lexically in the function declaration.
Proposed change: Add normative text to express the desired semantics.[2020-02 Moved to Immediate on Thursday afternoon in Prague.]
Proposed resolution:
This wording is relative to N4849.
Modify 17.8.2.2 [support.srcloc.cons] as indicated:
static consteval source_location current() noexcept;-1- […]
-2- Remarks:When a default member initializer is used to initialize a non-static data member, any calls toAny call tocurrent
current
that appears as a default member initializer (11.4 [class.mem]), or as a subexpression thereof, should correspond to the location of the constructor definition or aggregate initialization thatinitializes the memberuses the default member initializer. Any call tocurrent
that appears as a default argument (9.3.4.7 [dcl.fct.default]), or as a subexpression thereof, should correspond to the location of the invocation of the function that uses the default argument (7.6.1.3 [expr.call]).-3- [Note: When used as a default argument (9.3.4.7 [dcl.fct.default]), the value of thesource_location
will be the location of the call tocurrent
at the call site. — end note]