home | help
std::source_location(3)        C++ Standard Libary	 std::source_location(3)

NAME
     std::source_location - std::source_location

Synopsis
	Defined in header <source_location>
	struct source_location; 	     (since C++20)

	The  std::source_location class represents certain information about the
     source code,
	such as file names, line numbers, and function names. Previously,  func-
     tions that
	desire	to  obtain  this  information  about the call site (for logging,
     testing, or
	debugging purposes) must use  macros  so  that	predefined  macros  like
     __LINE__ and
	__FILE__  are expanded in the context of the caller. The std::source_lo-
     cation class
	provides a better alternative.

	std::source_location meets the DefaultConstructible, CopyConstructible,
	CopyAssignable and Destructible requirements. Lvalue of  std::source_lo-
     cation meets
	the Swappable requirement.

	Additionally, the following conditions are true:

	  * std::is_nothrow_move_constructible_v<std::source_location>,
	  * std::is_nothrow_move_assignable_v<std::source_location>, and
	  * std::is_nothrow_swappable_v<std::source_location>.

	It  is	intended  that	std::source_location has a small size and can be
     copied
	efficiently.

	It is unspecified whether the copy/move constructors and  the  copy/move
     assignment
	operators of std::source_location are trivial and/or constexpr.

Member functions
	      Creation
	constructor    constructs  a new source_location with implementation-de-
     fined values
		      (public member function)
	current       constructs a new source_location corresponding to the  lo-
     cation of the
	[static]      call site
		      (public static member function)
	      Field access
	line	      return the line number represented by this object
		      (public member function)
	column	      return the column number represented by this object
		      (public member function)
	file_name     return the file name represented by this object
		      (public member function)
	function_name  return  the  name of the function represented by this ob-
     ject, if any
		      (public member function)

Notes
	   Feature-test macro	   Value    Std 		   Feature
	__cpp_lib_source_location 201907L (C++20) Source-code  information  cap-
     ture
						  (std::source_location)

Example
     // Run this code

      #include <iostream>
      #include <source_location>
      #include <string_view>

      void log(const std::string_view message,
	       const std::source_location location =
		     std::source_location::current())
      {
	  std::clog << "file: "
		    << location.file_name() << '('
		    << location.line() << ':'
		    << location.column() << ") `"
		    << location.function_name() << "`: "
		    << message << '\n';
      }

      template<typename T>
      void fun(T x)
      {
	  log(x); // line 20
      }

      int main(int, char*[])
      {
	  log("Hello world!"); // line 25
	  fun("Hello C++20!");
      }

Possible output:
      file: main.cpp(25:8) `int main(int, char**)`: Hello world!
      file: main.cpp(20:8) `void fun(T) [with T = const char*]`: Hello C++20!

See also
			 changes  the source code's line number and, optionally,
     the current
	#line		 file name
			 (preprocessing directive)
	stacktrace_entry representation of an evaluation in a stacktrace
	(C++23) 	 (class)

http://cppreference.com 	   2024.06.10		 std::source_location(3)

home | help