std::source...ion::current(3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

std::source...ion::current(3) πŸ’…

okay bestie, quick vibe check: this page is from the C++ Standard Libary manual (yes, that's exactly how the header spells it, no cap), and the page title is std::source...ion::current(3). It's giving "where am I actually being called from?" energy, and honestly it ate. πŸ¦‹


✨ NAME ✨

  • std::source_location::current β€” std::source_location::current

Like... the name is the name, and the one-line description is also the name. Iconic, lowkey circular, we move. πŸ’–

🌸 Synopsis 🌸

static consteval source_location current() noexcept;

(since C++20)

It constructs a new source_location object corresponding to the location of the call site. periodt. ✨

πŸŽ€ Parameters πŸŽ€

(none) β€” no parameters, bestie. zero. nada. 🫢

πŸ’– Return value πŸ’–

  • If current() is invoked directly (via a function call that names current()), it returns a source_location object with implementation-defined values representing the location of the call. Those values should be affected by the #line preprocessor directive in the same manner as the predefined macros __LINE__ and __FILE__.
  • If current() is used in a default member initializer, the return value corresponds to the location of the constructor definition or aggregate initialization that initializes the data member.
  • If current() is used in a default argument, the return value corresponds to the location of the call to current() at the call site.
  • If current() is invoked in any other manner, the return value is unspecified. πŸ’€
ngl "unspecified" is the "you're on your own, bestie" of the C++ standard. not mean, just honest. πŸ™ˆ

πŸ”₯ Notes πŸ”₯

std::source_location::current typically requires compiler's built-in implementation. like, the compiler has to be in on the bit. 🧚

🌈 Example 🌈

        // Run this code

        #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()

πŸ‘‘ See also πŸ‘‘

  • constructor β€” constructs a new source_location with implementation-defined values (public member function)
  • current [static] β€” obtains the current stacktrace or its given part (public static member function of std::basic_stacktrace<Allocator>)

okay that's the whole page, bestie β€” source: http://cppreference.com, version/date: 2024.06.10, page: std::source...ion::current(3). bye, go get that source location πŸ’…βœ¨

πŸ“¦ where this page comes from