cppx-core
Source_location.hpp
Go to the documentation of this file.
1 #pragma once // Source encoding: UTF-8 with BOM (π is a lowercase Greek "pi").
2 //
3 // This class is used by the CPPX_FAIL macro. It can't use things that use CPPX_FAIL.
4 // Line and character position indexing is 1-based.
5 
6 #include <cppx-core/collections/is_empty.hpp> // cppx::is_empty
7 #include <cppx-core/failure-handling/Abstract_source_location.hpp> // cppx::Abstract_source_location
8 #include <cppx-core/language/syntax/macro-use.hpp> // CPPX_USE_STD
9 #include <cppx-core/meta-template/enable_if_.hpp> // cppx::Enable_if_
10 
11 #include <optional> // std::optional
12 #include <utility> // std::Enable_if_
13 #include <type_traits> // std::is_same_v
14 #include <optional> // std::optional
15 #include <utility> // std::move
16 #include <type_traits> // std::(Enable_if_, is_same_v)
17 
18 //TODO: improve, clean
19 
20 namespace cppx
21 {
22  CPPX_USE_STD( string, move, optional );
23 
26  {
27  string m_filename;
28  int m_linenumber;
29  int m_character_position; // -1 if none.
30  string m_function_name; // Empty if none.
31 
32  public:
33  auto filename() const -> string override { return m_filename; }
34  auto linenumber() const -> int override { return m_linenumber; }
35  auto character_position() const -> int override { return m_character_position; }
36  auto function_name() const -> string override { return m_function_name; }
37 
42  using Abstract_source_location::operator string;
43 
45  string filename,
46  optional<int> linenumber = {},
47  optional<int> character_position = {},
48  optional<string> function_name = {}
49  ):
50  m_filename( move( filename ) ),
51  m_linenumber( linenumber.value_or( -1 ) ),
52  m_character_position( character_position.value_or( -1 ) ),
53  m_function_name( move( function_name ).value_or( "" ) )
54  {}
55  };
56 
57 } // namespace cppx
auto character_position() const -> int override
auto filename() const -> string override
auto linenumber() const -> int override
Source_location(string filename, optional< int > linenumber={}, optional< int > character_position={}, optional< string > function_name={})
CPPX_USE_STD(basic_string, basic_string_view, bitset, char_traits, size)
auto function_name_or_unspecified() const -> string
Macros for generating more concise and clear using statements, primarily $use_cppx and $use_std,...
auto function_name() const -> string override