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 <vector>
	#include <source_location>
	#include <string_view>

	// 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.function_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		  2022.07.31	 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.0>

home | help