| //// |
| 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, <boost/assert/source_location.hpp> |
| :toc: |
| :toc-title: |
| :idprefix: |
| |
| ## Description |
| |
| The header `<boost/assert/source_location.hpp>` 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<class E, class T> |
| std::basic_ostream<E, T> & |
| operator<<( std::basic_ostream<E, T> & 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<class E, class T> |
| std::basic_ostream<E, T> & |
| operator<<( std::basic_ostream<E, T> & 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. |