1#ifndef MSTL_CORE_INTERFACE_ICHARACTER_HPP__
2#define MSTL_CORE_INTERFACE_ICHARACTER_HPP__
3#include "../string/string.hpp"
7template <
typename T,
typename CharT>
8struct icharacter : ipackage<T, CharT> {
9 static_assert(is_character_v<CharT>,
"icharacter can only be used with characters");
11 constexpr icharacter() noexcept = default;
12 constexpr icharacter(CharT value) noexcept : ipackage<T, CharT>(value) {}
14 MSTL_NODISCARD
constexpr explicit operator bool() const noexcept {
18 static MSTL_CONSTEXPR20
string to_string(
const basic_string_view<CharT>& obj) {
19 return T::to_string(obj);
21 static MSTL_CONSTEXPR20 wstring to_wstring(
const basic_string_view<CharT>& obj) {
22 return T::to_wstring(obj);
24#ifdef MSTL_STANDARD_20__
25 static MSTL_CONSTEXPR20 u8string to_u8string(
const basic_string_view<CharT>& obj) {
26 return T::to_u8string(obj);
29 static MSTL_CONSTEXPR20 u16string to_u16string(
const basic_string_view<CharT>& obj) {
30 return T::to_u16string(obj);
32 static MSTL_CONSTEXPR20 u32string to_u32string(
const basic_string_view<CharT>& obj) {
33 return T::to_u32string(obj);
37template <
typename CharT, enable_if_t<is_standard_
character_v<CharT>,
int> = 0>
38MSTL_CONSTEXPR20
string to_string(
const CharT& x) {
39 return icharacter<package_t<CharT>, CharT>::to_string(basic_string<CharT>(1, x).view());
41template <
typename CharT, enable_if_t<is_standard_
character_v<CharT>,
int> = 0>
42MSTL_CONSTEXPR20
string to_string(
const CharT* x) {
43 return icharacter<package_t<CharT>, CharT>::to_string(basic_string_view<CharT>(x));
45template <
typename CharT, enable_if_t<is_standard_
character_v<CharT>,
int> = 0>
46MSTL_CONSTEXPR20
string to_string(
const basic_string_view<CharT> x) {
47 return icharacter<package_t<CharT>, CharT>::to_string(x);
49template <
typename CharT, enable_if_t<is_standard_
character_v<CharT>,
int> = 0>
50MSTL_CONSTEXPR20
string to_string(
const basic_string<CharT>& x) {
51 return icharacter<package_t<CharT>, CharT>::to_string(x.view());
53template <
typename CharT, enable_if_t<is_standard_
character_v<CharT>,
int> = 0>
54MSTL_CONSTEXPR20
string to_string(basic_string<CharT>&& x) {
55 return icharacter<package_t<CharT>, CharT>::to_string(x.view());
58MSTL_CONSTEXPR20
string to_string<char>(
string&& x) {
62template <
typename CharT, enable_if_t<is_standard_
character_v<CharT>,
int> = 0>
63MSTL_CONSTEXPR20 wstring to_wstring(
const CharT& x) {
64 return icharacter<package_t<CharT>, CharT>::to_wstring(basic_string<CharT>(1, x).view());
66template <
typename CharT, enable_if_t<is_standard_
character_v<CharT>,
int> = 0>
67MSTL_CONSTEXPR20 wstring to_wstring(
const CharT* x) {
68 return icharacter<package_t<CharT>, CharT>::to_wstring(basic_string_view<CharT>(x));
70template <
typename CharT, enable_if_t<is_standard_
character_v<CharT>,
int> = 0>
71MSTL_CONSTEXPR20 wstring to_wstring(
const basic_string_view<CharT> x) {
72 return icharacter<package_t<CharT>, CharT>::to_wstring(x);
74template <
typename CharT, enable_if_t<is_standard_
character_v<CharT>,
int> = 0>
75MSTL_CONSTEXPR20 wstring to_wstring(
const basic_string<CharT>& x) {
76 return icharacter<package_t<CharT>, CharT>::to_wstring(x.view());
78template <
typename CharT, enable_if_t<is_standard_
character_v<CharT>,
int> = 0>
79MSTL_CONSTEXPR20 wstring to_wstring(basic_string<CharT>&& x) {
80 return icharacter<package_t<CharT>, CharT>::to_wstring(x.view());
83MSTL_CONSTEXPR20 wstring to_wstring<wchar_t>(wstring&& x) {
87#ifdef MSTL_STANDARD_20__
88template <
typename CharT, enable_if_t<is_standard_
character_v<CharT>,
int> = 0>
89MSTL_CONSTEXPR20 u8string to_u8string(
const CharT& x) {
90 return icharacter<package_t<CharT>, CharT>::to_u8string(basic_string<CharT>(1, x).view());
92template <
typename CharT, enable_if_t<is_standard_
character_v<CharT>,
int> = 0>
93MSTL_CONSTEXPR20 u8string to_u8string(
const CharT* x) {
94 return icharacter<package_t<CharT>, CharT>::to_u8string(basic_string_view<CharT>(x));
96template <
typename CharT, enable_if_t<is_standard_
character_v<CharT>,
int> = 0>
97MSTL_CONSTEXPR20 u8string to_u8string(
const basic_string_view<CharT> x) {
98 return icharacter<package_t<CharT>, CharT>::to_u8string(x);
100template <
typename CharT, enable_if_t<is_standard_
character_v<CharT>,
int> = 0>
101MSTL_CONSTEXPR20 u8string to_u8string(
const basic_string<CharT>& x) {
102 return icharacter<package_t<CharT>, CharT>::to_u8string(x.view());
104template <
typename CharT, enable_if_t<is_standard_
character_v<CharT>,
int> = 0>
105MSTL_CONSTEXPR20 u8string to_u8string(basic_string<CharT>&& x) {
106 return icharacter<package_t<CharT>, CharT>::to_u8string(x.view());
109MSTL_CONSTEXPR20 u8string to_u8string<char8_t>(u8string&& x) {
114template <
typename CharT, enable_if_t<is_standard_
character_v<CharT>,
int> = 0>
115MSTL_CONSTEXPR20 u16string to_u16string(
const CharT& x) {
116 return icharacter<package_t<CharT>, CharT>::to_u16string(basic_string<CharT>(1, x).view());
118template <
typename CharT, enable_if_t<is_standard_
character_v<CharT>,
int> = 0>
119MSTL_CONSTEXPR20 u16string to_u16string(
const CharT* x) {
120 return icharacter<package_t<CharT>, CharT>::to_u16string(basic_string_view<CharT>(x));
122template <
typename CharT, enable_if_t<is_standard_
character_v<CharT>,
int> = 0>
123MSTL_CONSTEXPR20 u16string to_u16string(
const basic_string_view<CharT> x) {
124 return icharacter<package_t<CharT>, CharT>::to_u16string(x);
126template <
typename CharT, enable_if_t<is_standard_
character_v<CharT>,
int> = 0>
127MSTL_CONSTEXPR20 u16string to_u16string(
const basic_string<CharT>& x) {
128 return icharacter<package_t<CharT>, CharT>::to_u16string(x.view());
130template <
typename CharT, enable_if_t<is_standard_
character_v<CharT>,
int> = 0>
131MSTL_CONSTEXPR20 u16string to_u16string(basic_string<CharT>&& x) {
132 return icharacter<package_t<CharT>, CharT>::to_u16string(x.view());
135MSTL_CONSTEXPR20 u16string to_u16string<char16_t>(u16string&& x) {
139template <
typename CharT, enable_if_t<is_standard_
character_v<CharT>,
int> = 0>
140MSTL_CONSTEXPR20 u32string to_u32string(
const CharT& x) {
141 return icharacter<package_t<CharT>, CharT>::to_u32string(basic_string<CharT>(1, x).view());
143template <
typename CharT, enable_if_t<is_standard_
character_v<CharT>,
int> = 0>
144MSTL_CONSTEXPR20 u32string to_u32string(
const CharT* x) {
145 return icharacter<package_t<CharT>, CharT>::to_u32string(basic_string_view<CharT>(x));
147template <
typename CharT, enable_if_t<is_standard_
character_v<CharT>,
int> = 0>
148MSTL_CONSTEXPR20 u32string to_u32string(
const basic_string_view<CharT> x) {
149 return icharacter<package_t<CharT>, CharT>::to_u32string(x);
151template <
typename CharT, enable_if_t<is_standard_
character_v<CharT>,
int> = 0>
152MSTL_CONSTEXPR20 u32string to_u32string(
const basic_string<CharT>& x) {
153 return icharacter<package_t<CharT>, CharT>::to_u32string(x.view());
155template <
typename CharT, enable_if_t<is_standard_
character_v<CharT>,
int> = 0>
156MSTL_CONSTEXPR20 u32string to_u32string(basic_string<CharT>&& x) {
157 return icharacter<package_t<CharT>, CharT>::to_u32string(x.view());
160MSTL_CONSTEXPR20 u32string to_u32string<char32_t>(u32string&& x) {
#define _MSTL
全局命名空间MSTL前缀
#define MSTL_END_NAMESPACE__
结束全局命名空间MSTL
#define MSTL_BEGIN_NAMESPACE__
开始全局命名空间MSTL
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result)
移动范围元素
constexpr T initialize() noexcept(is_nothrow_default_constructible< T >::value)
返回类型T的默认初始化值