|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Creation | ||||
source_location::current | ||||
| Field access | ||||
static consteval source_location current()noexcept; | (since C++20) | |
Constructs a newsource_location object corresponding to the location of the call site.
Contents |
(none)
Ifcurrent() is invoked directly (via a function call that namescurrent()), it returns asource_location object with implementation-defined values representing the location of the call. The values should be affected by the#line preprocessor directive in the same manner as the predefined macros__LINE__ and__FILE__.
Ifcurrent() is used in adefault member initializer, the return value corresponds to the location of the constructor definition oraggregate initialization that initializes the data member.
Ifcurrent() is used in a default argument, the return value corresponds to the location of the call tocurrent() at the call site.
Ifcurrent() is invoked in any other manner, the return value is unspecified.
std::source_location::current typically requires compiler's built-in implementation.
#include <source_location>#include <iostream> struct src_rec{std::source_location srcl= std::source_location::current();int dummy=0; src_rec(std::source_location loc= std::source_location::current()): srcl(loc)// values of member refer to the location of the calling function{} src_rec(int i):// values of member refer to this location dummy(i){} src_rec(double)// values of member refer to this location{}}; std::source_location src_clone(std::source_location a= std::source_location::current()){return a;} std::source_location src_make(){std::source_location b= std::source_location::current();return b;} int main(){ src_rec srec0; src_rec srec1(0); src_rec srec2(0.0);auto s0= std::source_location::current();auto s1= src_clone(s0);auto s2= src_clone();auto s3= src_make(); std::cout<< srec0.srcl.line()<<' '<< srec0.srcl.function_name()<<'\n'<< srec1.srcl.line()<<' '<< srec1.srcl.function_name()<<'\n'<< srec2.srcl.line()<<' '<< srec2.srcl.function_name()<<'\n'<< s0.line()<<' '<< s0.function_name()<<'\n'<< s1.line()<<' '<< s1.function_name()<<'\n'<< s2.line()<<' '<< s2.function_name()<<'\n'<< s3.line()<<' '<< s3.function_name()<<'\n';}
Possible output:
31 int main()12 src_rec::src_rec(int)15 src_rec::src_rec(double)34 int main()34 int main()36 int main()25 std::source_location src_make()
constructs a newsource_location with implementation-defined values(public member function)[edit] | |
[static] | obtains the current stacktrace or its given part (public static member function of std::basic_stacktrace<Allocator>)[edit] |