115 lines
3.7 KiB
Markdown
115 lines
3.7 KiB
Markdown
[meta.reflection.exception]
|
||
|
||
# 21 Metaprogramming library [[meta]](./#meta)
|
||
|
||
## 21.4 Reflection [[meta.reflection]](meta.reflection#exception)
|
||
|
||
### 21.4.4 Class exception [meta.reflection.exception]
|
||
|
||
[ð](#lib:exception)
|
||
|
||
namespace std::meta {class exception : public std::exception {private: optional<string> *what_*; // *exposition only* u8string *u8what_*; // *exposition only* info *from_*; // *exposition only* source_location *where_*; // *exposition only*public:consteval exception(u8string_view what, info from,
|
||
source_location where = source_location::current()) noexcept; consteval exception(string_view what, info from,
|
||
source_location where = source_location::current()) noexcept;
|
||
|
||
exception(const exception&) = default;
|
||
exception(exception&&) = default;
|
||
|
||
exception& operator=(const exception&) = default;
|
||
exception& operator=(exception&&) = default; constexpr const char* what() const noexcept override; consteval u8string_view u8what() const noexcept; consteval info from() const noexcept; consteval source_location where() const noexcept; };}
|
||
|
||
[1](#1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/meta.tex#L3467)
|
||
|
||
Reflection functions throw exceptions of type meta::exception to signal an error[.](#1.sentence-1)
|
||
|
||
meta::exception is a consteval-only type[.](#1.sentence-2)
|
||
|
||
[ð](#lib:exception,constructor)
|
||
|
||
`consteval exception(u8string_view what, info from,
|
||
source_location where = source_location::current()) noexcept;
|
||
`
|
||
|
||
[2](#2)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/meta.tex#L3478)
|
||
|
||
*Effects*: Initializes*u8what_* with what,*from_* with from, and*where_* with where[.](#2.sentence-1)
|
||
|
||
If what can be represented in the ordinary literal encoding,
|
||
initializes *what_* with what,
|
||
transcoded from UTF-8 to the ordinary literal encoding[.](#2.sentence-2)
|
||
|
||
Otherwise, *what_* is value-initialized[.](#2.sentence-3)
|
||
|
||
[ð](#lib:exception,constructor_)
|
||
|
||
`consteval exception(string_view what, info from,
|
||
source_location where = source_location::current()) noexcept;
|
||
`
|
||
|
||
[3](#3)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/meta.tex#L3496)
|
||
|
||
*Constant When*: what designates a sequence of characters
|
||
that can be encoded in UTF-8[.](#3.sentence-1)
|
||
|
||
[4](#4)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/meta.tex#L3501)
|
||
|
||
*Effects*: Initializes*what_* with what,*u8what_* with what transcoded from the ordinary literal encoding to UTF-8,*from_* with from and*where_* with where[.](#4.sentence-1)
|
||
|
||
[ð](#lib:what,exception)
|
||
|
||
`constexpr const char* what() const noexcept override;
|
||
`
|
||
|
||
[5](#5)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/meta.tex#L3517)
|
||
|
||
*Constant When*: *what_*.has_value() is true[.](#5.sentence-1)
|
||
|
||
[6](#6)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/meta.tex#L3521)
|
||
|
||
*Returns*: *what_*->c_str()[.](#6.sentence-1)
|
||
|
||
[ð](#lib:u8what,exception)
|
||
|
||
`consteval u8string_view u8what() const noexcept;
|
||
`
|
||
|
||
[7](#7)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/meta.tex#L3531)
|
||
|
||
*Returns*: *u8what_*[.](#7.sentence-1)
|
||
|
||
[ð](#lib:from,exception)
|
||
|
||
`consteval info from() const noexcept;
|
||
`
|
||
|
||
[8](#8)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/meta.tex#L3541)
|
||
|
||
*Returns*: *from_*[.](#8.sentence-1)
|
||
|
||
[ð](#lib:where,exception)
|
||
|
||
`consteval source_location where() const noexcept;
|
||
`
|
||
|
||
[9](#9)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/meta.tex#L3551)
|
||
|
||
*Returns*: *where_*[.](#9.sentence-1)
|