Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::source...rce_location(3) C++ Standard Libarystd::source...rce_location(3)

NAME
       std::source_location::source_location	    -	     std::source_loca-
       tion::source_location

Synopsis
	  constexpr  source_location()	noexcept;		  (1)	(since
       C++20)
	  source_location(  const  source_location&  other  );	    (2)	(since
       C++20)
	  source_location( source_location&&  other  )	noexcept;  (3)	(since
       C++20)

	  1) Constructs	a source_location object of unspecified	value.
	  2,3)	Copy and move constructors. It is unspecified whether they are
       trivial and/or
	  constexpr.

Parameters
	  other	- another source_location to copy or move from

Example
       // Run this code

	#include <iomanip>
	#include <iostream>
	#include <ranges>
	#include <source_location>
	#include <string_view>
	#include <vector>

	// GCC specific	type name printer
	#if (__GNUG__ >= 11)
	template<typename T>
	auto type_name_helper(const std::source_location s = std::source_loca-
       tion::current())
	{
	    using std::operator""sv;
	    const std::string_view fun_name{s.function_name()};
	    constexpr auto prefix{"[with T = "sv};
	    const auto type_name_begin{fun_name.find(prefix)};
	    if (""sv.npos == type_name_begin)
		return ""sv;
	    const std::size_t first{type_name_begin + prefix.length()};
	    return std::string_view{fun_name.cbegin() +	first, fun_name.cend()
       - 1};
	}

	template<typename T>
	auto type_name() { return type_name_helper<T>(); }
	#endif

	void print(std::string_view const comment, std::source_location	 const
       l)
	{
	    std::cout << comment << ":\n"
		      << "  file_name	  : " << std::quoted(l.file_name()) <<
       '\n'
		      <<   "	function_name	:   "  <<  std::quoted(l.func-
       tion_name()) << '\n'
		      << "  line	  : " << l.line() << '\n'
		      << "  column	  : " << l.column() << '\n';
	}

	int main()
	{
	    constexpr std::source_location default_constructed;
	    print("default constructed", default_constructed);

	    constexpr	std::source_location   current	 =   std::source_loca-
       tion::current();
	    print("current", current);

	#if (__GNUG__ >= 11)
	    const std::vector<std::vector<int>>	v{{1,2}, {3,4,5}, {6}};
	    auto jv = std::ranges::join_view(v);
	    std::cout << '\n'
		      << '[' <<	type_name<int>() << "]\n"
		      << '[' <<	type_name<double*>() <<	"]\n"
		      << '[' <<	type_name<decltype([](){})>() << "]\n"
		      <<  '['  <<  type_name<decltype(type_name<int>())>()  <<
       "]\n"
		      << '[' <<	type_name<decltype(jv)>() << "]\n";
	#endif
	}

Possible output:
	default	constructed:
	  file_name	: ""
	  function_name	: ""
	  line		: 0
	  column	: 0
	current:
	  file_name	: "main.cpp"
	  function_name	: "int main()"
	  line		: 39
	  column	: 75

	[int]
	[double*]
	[main()::<lambda()>]
	[std::basic_string_view<char>]
	[std::ranges::join_view<std::ranges::ref_view<const	     std::vec-
       tor<std::vector<int> > >	>]

See also
	  current	 constructs a new source_location corresponding	to the
       location	of the
	  [static]	call site
			(public	static member function)
	  constructor	constructs a new stacktrace_entry
	  (C++23)	(public	member function	of std::stacktrace_entry)

http://cppreference.com		  2024.06.10	 std::source...rce_location(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::source_location::source_location&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help