//// Copyright 2019 Peter Dimov Distributed under the Boost Software License, Version 1.0. http://www.boost.org/LICENSE_1_0.txt //// [#source_location_support] # Source Location Support, :toc: :toc-title: :idprefix: ## Description The header `` defines `source_location`, a class representing a source location and containing file, line, function and column information. It's similar to `std::source_location` from {cpp}20, but only requires {cpp}03. The macro `BOOST_CURRENT_LOCATION` creates a `source_location` object containing information about the current source location. ## Synopsis ``` namespace boost { struct source_location { constexpr source_location() noexcept; constexpr source_location(char const* file, uint_least32_t line, char const* function, uint_least32_t column = 0) noexcept; constexpr char const* file_name() const noexcept; constexpr char const* function_name() const noexcept; constexpr uint_least32_t line() const noexcept; constexpr uint_least32_t column() const noexcept; }; template std::basic_ostream & operator<<( std::basic_ostream & os, source_location const & loc ); } // namespace boost #define BOOST_CURRENT_LOCATION \ ::boost::source_location(__FILE__, __LINE__, BOOST_CURRENT_FUNCTION) ``` ## source_location ``` constexpr source_location() noexcept; ``` Effects: :: Constructs a `source_location` object for which `file_name()` and `function_name()` return `"(unknown)"`, and `line()` and `column()` return `0`. ``` constexpr source_location(char const* file, uint_least32_t line, char const* function, uint_least32_t column = 0) noexcept; ``` Effects: :: Constructs a `source_location` object for which `file_name()` returns `file`, `function_name()` returns `function`, `line()` returns the `line` argument and `column()` returns the `column` argument. ## operator<< ``` template std::basic_ostream & operator<<( std::basic_ostream & os, source_location const & loc ); ``` Effects: :: Outputs a string representation of `loc` to `os`. Returns: :: `os`. ## BOOST_CURRENT_LOCATION When `BOOST_DISABLE_CURRENT_LOCATION` is not defined, the definition of `BOOST_CURRENT_LOCATION` is: ``` #define BOOST_CURRENT_LOCATION \ ::boost::source_location(__FILE__, __LINE__, BOOST_CURRENT_FUNCTION) ``` Otherwise, `BOOST_CURRENT_LOCATION` is defined as: ``` #define BOOST_CURRENT_LOCATION ::boost::source_location() ``` This allows producing executables that contain no identifying information, for security reasons.