[support.srcloc.cons]

# 17 Language support library [[support]](./#support)

## 17.8 Source location [[support.srcloc]](support.srcloc#cons)

### 17.8.2 Class source_location [[support.srcloc.class]](support.srcloc.class#support.srcloc.cons)

#### 17.8.2.2 Creation [support.srcloc.cons]

[ð](#itemdecl:1)

`static consteval source_location current() noexcept;
`

[1](#1)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L3705)

*Returns*: 

- [(1.1)](#1.1)

  When invoked by a function call
 whose [*postfix-expression*](expr.post.general#nt:postfix-expression "7.6.1.1 General [expr.post.general]") is
 a (possibly parenthesized) [*id-expression*](expr.prim.id.general#nt:id-expression "7.5.5.1 General [expr.prim.id.general]") naming current,
 returns a source_location with an implementation-defined value[.](#1.1.sentence-1)
  The value should be affected by #line ([[cpp.line]](cpp.line "15.8 Line control"))
 in the same manner as for __LINE__ and __FILE__[.](#1.1.sentence-2)
  The values of the exposition-only data members
 of the returned source_location object
 are indicated in Table [43](#tab:support.srcloc.current "Table 43: Value of object returned by current")[.](#1.1.sentence-3)
  Table [43](#tab:support.srcloc.current) — Value of object returned by current [[tab:support.srcloc.current]](./tab:support.srcloc.current)  

| [ð](#tab:support.srcloc.current-row-1)<br>   **Element** | **Value** |
| --- | --- |
| [ð](#tab:support.srcloc.current-row-2)<br>   line_ | A presumed line number ([[cpp.predefined]](cpp.predefined "15.12 Predefined macro names"))[.](#tab:support.srcloc.current-row-2-column-2-sentence-1)<br>Line numbers are presumed to be 1-indexed;  however, an implementation is encouraged to use 0  when the line number is unknown[.](#tab:support.srcloc.current-row-2-column-2-sentence-2) |
| [ð](#tab:support.srcloc.current-row-3)<br>   column_ | An implementation-defined value denoting  some offset from the start of the line denoted by line_[.](#tab:support.srcloc.current-row-3-column-2-sentence-1)<br>Column numbers are presumed to be 1-indexed;  however, an implementation is encouraged to use 0  when the column number is unknown[.](#tab:support.srcloc.current-row-3-column-2-sentence-2) |
| [ð](#tab:support.srcloc.current-row-4)<br>   file_name_ | A presumed name of the current source file ([[cpp.predefined]](cpp.predefined "15.12 Predefined macro names")) as an ntbs[.](#tab:support.srcloc.current-row-4-column-2-sentence-1) |
| [ð](#tab:support.srcloc.current-row-5)<br>   function_name_ | A name of the current function  such as in __func__ ([[dcl.fct.def.general]](dcl.fct.def.general "9.6.1 General")) if any,  an empty string otherwise[.](#tab:support.srcloc.current-row-5-column-2-sentence-1) |

- [(1.2)](#1.2)

  Otherwise, when invoked in some other way, returns a source_location whose data members are initialized
 with valid but unspecified values[.](#1.2.sentence-1)

[2](#2)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L3748)

*Remarks*: Any call to current that appears
as a default member initializer ([[class.mem.general]](class.mem.general "11.4.1 General")), or
as a subexpression thereof,
should correspond to the location of
the constructor definition or aggregate initialization
that uses the default member initializer[.](#2.sentence-1)

Any call to current that appears
as a default argument ([[dcl.fct.default]](dcl.fct.default "9.3.4.7 Default arguments")), or
as a subexpression thereof,
should correspond to the location of the invocation of the function
that uses the default argument ([[expr.call]](expr.call "7.6.1.3 Function call"))[.](#2.sentence-2)

[3](#3)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L3763)

[*Example [1](#example-1)*: struct s { source_location member = source_location::current(); int other_member;
 s(source_location loc = source_location::current()): member(loc) // values of member refer to the location of the calling function ([[dcl.fct.default]](dcl.fct.default "9.3.4.7 Default arguments")){} s(int blather) : // values of member refer to this location other_member(blather){} s(double) // values of member refer to this location{}};void f(source_location a = source_location::current()) { source_location b = source_location::current(); // values in b refer to this line}void g() { f(); // f's first argument corresponds to this line of code source_location c = source_location::current();
 f(c); // f's first argument gets the same values as c, above} â *end example*]

[ð](#itemdecl:2)

`constexpr source_location() noexcept;
`

[4](#4)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/support.tex#L3796)

*Effects*: The data members are initialized with valid but unspecified values[.](#4.sentence-1)
