1 #pragma once
2 #include <cstdint>
3 #include <system_error>
4 #include <type_traits>
5 
6 namespace estd {
7 
8 enum class unspecified_errc : int {
9 	unspecified = -1,
10 };
11 
12 namespace detail {
13 	inline class unspecified_error_category : public std::error_category {
name() const14 		char const * name() const noexcept override { return "unspecified"; }
15 
message(int code) const16 		std::string message(int code) const override {
17 			(void) code;
18 			return "unspecified error";
19 		}
20 	} unspecified_error_category_;
21 }
22 
unspecified_error_category()23 inline std::error_category & unspecified_error_category() {
24 	return detail::unspecified_error_category_;
25 }
26 
make_error_code(unspecified_errc code)27 inline std::error_code make_error_code(unspecified_errc code) {
28 	return std::error_code{int(code), unspecified_error_category()};
29 }
30 
unspecified_error(int value)31 inline std::error_code unspecified_error(int value) {
32 	return std::error_code(value, unspecified_error_category());
33 }
34 
35 }
36 
37 template<> class std::is_error_code_enum<estd::unspecified_errc> : public std::true_type{};
38