22template <
typename ITERATOR_TYPE >
27template <
typename SEQUENCE >
30template<
typename SEQUENCE2>
37template<
typename SEQUENCE3>
43template<
typename SEQUENCE4>
52template<
typename ENUM>
54 std::is_enum<::decay<ENUM>>::value;
56template<
typename ENUMERATION>
58 ::is_same<typename ENUMERATION::ENUM_TYPE_TAG, enum_type_t>;
60template<
typename CFLAG>
63template <
typename ENUM >
65 prototype_raw_enum < ENUM >
66 || prototype_enumeration < ENUM >
67 || prototype_c_flag < ENUM >;
70template <
typename BLOCK >
71concept prototype_block = ::is_same<typename BLOCK::PRIMITIVE_BLOCK_TAG, PRIMITIVE_BLOCK_TAG_TYPE >;
73template<
typename RAW_ARRAY >
83template <
typename T >
85(std::is_integral_v < T >) &&
sizeof(T) <= 4;
87template <
typename T >
90template <
typename T >
93template <
typename T >
94concept prototype_signed = std::is_integral < T >::value && std::is_signed < T >::value;
96template <
typename T >
99template <
typename T >
102template <
typename T >
105template <
typename FLOATING >
110template <
typename AGGREGATE >
114template <
typename T >
117template <
typename T >
118concept prototype_type = !std::is_fundamental < T >::value && !std::is_pointer < T >::value;
120template<
typename ITERATOR_TYPE>
123template <
typename T >
124concept prototype_range = ::std::is_base_of_v < ::range< typename T::this_iterator >, T >;
126template <
typename T >
135template <
typename T,
typename ITERATOR_TYPE >
138|| ::is_same < non_const < ITERATOR_TYPE >, non_const < typename T::this_iterator > >;
141template <
typename FROM,
typename TO >
143::std::is_convertible < FROM, TO >::value ||
144::std::is_convertible < FROM, const TO >::value;
146template <
typename FROM,
typename TO >
150template <
typename FROM,
typename TO >
152::std::is_convertible < ::decay < FROM > *, TO >::value;
155template <
typename FROM,
typename TO >
159template <
typename FROM,
typename TO_POINTER >
161::std::is_convertible < FROM, TO_POINTER * >::value ||
162::std::is_convertible < FROM, const TO_POINTER * >::value;
164template <
typename FROM,
typename TO_POINTER >
168template <
typename T >
170 ::is_same < ::non_const<T>, ::i8> ||
171 ::is_same < ::non_const<T>,
char8_t> ||
172 ::is_same < ::non_const<T>,
wchar_t> ||
173 ::is_same < ::non_const<T>, ::ansi_character> ||
174 ::is_same < ::non_const<T>, ::wd16_character> ||
175 ::is_same < ::non_const<T>, ::wd32_character>;
180 && ::is_const<::non_pointer<T>>
191template<
typename CHARACTER, std::
size_t N>
196 static constexpr std::size_t size = N;
208template<
typename NONCHARACTER, std::
size_t N>
212 using type = NONCHARACTER;
213 static constexpr std::size_t size = N;
222template<
typename NONCHARACTER, std::
size_t N>
226 using type = NONCHARACTER;
227 static constexpr std::size_t size = N;
231template<
typename NONCHARACTER, std::
size_t N>
235 using type = NONCHARACTER;
236 static constexpr std::size_t size = N;
248 ::prototype_raw_array<T> &&
252template <
typename T >
254::is_same < T, ::u8 * > ||
255::is_same < T, char_pointer > ||
256::is_same < T, char8_t * > ||
257::is_same < T, wchar_t * > ||
258::is_same < T, ::ansi_character * > ||
259::is_same < T, ::wd16_character * > ||
260::is_same < T, ::wd32_character * > ||
261::is_same < T, const ::u8 * > ||
262::is_same < T, const_char_pointer > ||
263::is_same < T, const char8_t * > ||
264::is_same < T, const wchar_t * > ||
265::is_same < T, const_char_pointer > ||
266::is_same < T, const ::wd16_character * > ||
267::is_same < T, const ::wd32_character * >;
270template <
typename T >
272::is_same < T, ::u8 * & > ||
273::is_same < T, char_pointer & > ||
274::is_same < T, char8_t *& > ||
275::is_same < T, wchar_t * & > ||
276::is_same < T, ::ansi_character * & > ||
277::is_same < T, ::wd16_character * & > ||
278::is_same < T, ::wd32_character * & > ||
279::is_same < T, const ::u8 * & > ||
280::is_same < T, const_char_pointer &> ||
281::is_same < T, const char8_t *& > ||
282::is_same < T, const wchar_t * & > ||
283::is_same < T, const_char_pointer &> ||
284::is_same < T, const ::wd16_character * & > ||
285::is_same < T, const ::wd32_character * & >;
288template <
typename T,
typename CHARACTER >
290::is_same < T, CHARACTER*& > ||
291::is_same < T, const CHARACTER*& >;
293template <
typename T,
typename CHARACTER >
295prototype_character < T > &&
296!::is_same < T, CHARACTER*& > &&
297!::is_same < T, const CHARACTER*& >;
299template <
typename T,
typename CHARACTER >
301prototype_character < T > &&
302!::is_same < T, CHARACTER >;
305template <
typename CHARACTER_POINTER >
307::std::is_pointer_v<CHARACTER_POINTER>
308&& !::std::is_array_v<CHARACTER_POINTER>
312template <
typename TYPED_CHARACTER_POINTER,
typename CHARACTER >
314::std::is_pointer_v<TYPED_CHARACTER_POINTER>
315&& !::std::is_array_v<TYPED_CHARACTER_POINTER>
316&& ::is_same < ::non_const<CHARACTER>, ::non_const <::non_pointer<TYPED_CHARACTER_POINTER>>>;
319template <
typename OTHER_CHARACTER_POINTER,
typename CHARACTER >
321::std::is_pointer_v<OTHER_CHARACTER_POINTER>
322&& !::std::is_array_v<OTHER_CHARACTER_POINTER>
324&& !::is_same < CHARACTER, ::non_const <::non_pointer<OTHER_CHARACTER_POINTER>>>;
340template <
typename ITERATOR_TYPE >
343template <
typename ITERATOR_TYPE>
350 std::is_pointer<T>::value &&
352 typename non_const<non_pointer<T>>;
355 std::same_as<non_const<non_pointer<T>>, ::i8> ||
356 std::same_as<non_const<non_pointer<T>>,
wchar_t> ||
357 std::same_as<non_const<non_pointer<T>>,
char8_t> ||
358 std::same_as<non_const<non_pointer<T>>,
char16_t> ||
359 std::same_as<non_const<non_pointer<T>>,
char32_t>
362template <
typename STDSTRING >
363concept prototype_std_string = (::std::is_base_of_v<::std::string, STDSTRING > || ::std::is_base_of_v<::std::wstring, STDSTRING >);
366template <
typename CHARACTER_RANGE >
368(::std::is_base_of_v < ::character_range< const typename CHARACTER_RANGE::CHARACTER* >, CHARACTER_RANGE >
369&& prototype_character < typename CHARACTER_RANGE::CHARACTER > )||
371prototype_character < typename CHARACTER_RANGE::ITEM >);
375template <
typename TYPED_CHARACTER_RANGE,
typename CHARACTER >
377(::std::is_base_of_v < ::character_range< const CHARACTER* >, TYPED_CHARACTER_RANGE >
378 || ::is_same < ::character_range< const CHARACTER* >, TYPED_CHARACTER_RANGE >)
379 && prototype_character < CHARACTER >;
382template <
typename OTHER_CHARACTER_RANGE,
typename CHARACTER >
384(::std::is_base_of_v < ::character_range< const typename OTHER_CHARACTER_RANGE::CHARACTER* >, OTHER_CHARACTER_RANGE >
385 && other_primitive_character < typename OTHER_CHARACTER_RANGE::CHARACTER, CHARACTER >) ||
387 other_primitive_character < typename OTHER_CHARACTER_RANGE::ITEM, CHARACTER >);
392template <
typename ITERATOR >
396template <
typename TYPE >
404 template <
typename ORDERING,
typename TYPE >
405 concept ordering = ::is_same<typename ORDERING::ORDERING, for_type < TYPE > >;
407 template <
typename EQUALITY,
typename TYPE >
408 concept equality = ::is_same<typename EQUALITY::EQUALITY, for_type < TYPE > >;
411 constexpr bool done_with_result(
bool bEqual) {
return !bEqual; }
414 constexpr bool done_with_result(std::strong_ordering order) {
return order != 0; }
417 template <
typename COMPARISON >
418 constexpr auto tuple(COMPARISON comparison)
426 template<
typename COMPARISON,
typename... Args>
427 constexpr auto tuple(COMPARISON
comparison, Args... args)
432 if (done_with_result(result))
439 return tuple(args...);
448template <
typename ITERATOR >
452using ansi_string = string_base < const_char_pointer >;
453using wd16_string = string_base < const ::wd16_character * >;
454using wd32_string = string_base < const ::wd32_character * >;
455using wide_string = string_base < const ::wide_character * >;
456using string = ::ansi_string;
461template <
typename HAS_AS_STRING >
469template <
typename HAS_GET_STRING >
528template <
typename PAYLOAD >
530::std::is_base_of_v < ::payload, PAYLOAD >
531|| ::is_same < ::payload, PAYLOAD >;
534template <
typename A_CONST >
537template <
typename NON_CONST >
540template <
typename HAS_AS_STRING_NOT_PAYLOAD >
544template <
typename ATOM >
545concept prototype_atom = ::is_same < typename ATOM::PRIMITIVE_ATOM_TAG, PRIMITIVE_ATOM_TAG_TYPE >;
547template <
typename STRING >
548concept prototype_string = ::is_same < typename STRING::PRIMITIVE_STRING_TAG, PRIMITIVE_STRING_TAG_TYPE >;
550template <
typename TYPED_PRIMITIVE_STRING,
typename CHARACTER >
552(::std::is_base_of_v < ::string_base< const CHARACTER* >, TYPED_PRIMITIVE_STRING >
553 || ::is_same < ::string_base< const CHARACTER* >, TYPED_PRIMITIVE_STRING >)
554 && prototype_character < CHARACTER >;
557template <
typename OTHER_PRIMITIVE_STRING,
typename CHARACTER >
559(::std::is_base_of_v < ::string_base< const typename OTHER_PRIMITIVE_STRING::CHARACTER* >, OTHER_PRIMITIVE_STRING >
560 && other_primitive_character < typename OTHER_PRIMITIVE_STRING::CHARACTER, CHARACTER >) ||
562 other_primitive_character < typename OTHER_PRIMITIVE_STRING::ITEM, CHARACTER >);
564template <
typename SCOPED_STRING >
565concept prototype_scoped_string = ::is_same < typename SCOPED_STRING::PRIMITIVE_SCOPED_STRING_TAG, PRIMITIVE_SCOPED_STRING_TAG_TYPE >;
569template <
typename T >
573template <
typename T >
577template<
typename NUMBER>
583template <
typename NUMBER >
585prototype_integral < NUMBER > ||
586prototype_floating < NUMBER > ||
587prototype_enum < NUMBER >;
590template <
typename POINT >
593 { point.x }->prototype_number;
594 { point.y }->prototype_number;
598template <
typename POINT >
601 { point.semantic_t() } ->::std::convertible_to<
point2_t>;
602 { point.x() }->prototype_number;
603 { point.y() }->prototype_number;
606template <
typename POINT >
609 { point.semantic_t() } ->::std::convertible_to<
point2_t>;
610 { point.x }->prototype_number;
611 { point.y }->prototype_number;
615template <
typename POINT >
637template <
typename POLE >
640 { pole.x }->prototype_number;
641 { pole.y }->prototype_number;
642 { pole.z }->prototype_number;
646template <
typename POINT >
656template <
typename SIZE >
659 { s.semantic_t() } ->::std::convertible_to<
size2_t>;
660 { s.x }->prototype_number;
661 { s.y }->prototype_number;
665template <
typename SIZE >
668 { s.semantic_t() } ->::std::convertible_to<
size2_t>;
669 { s.x }->prototype_number;
670 { s.y }->prototype_number;
675template <
typename SIZE >
676concept prototype_size = function_size <SIZE> || struct_size <SIZE>;
679template <
typename Dimension >
687template <
typename DIMENSION >
695template<
typename RECTANGLE>
704template<
typename RECTANGLE>
713template <
typename RECTANGLE >
721template <
typename RECTANGLE >
730template <
typename RECTANGLE >
739template <
typename RECTANGLE >
749template <
typename RECTANGLE >
752 { rectangle.origin }->raw_primitive_point;
753 { rectangle.size }->prototype_dimension;
768template < prototype_number NUMBER >
778template < prototype_number NUMBER >
782template < prototype_number NUMBER >
786template < prototype_number NUMBER >
791template<
typename SUBPARTICLE>
809template <
typename RAW_TYPE >
811 ::prototype_number < decay < RAW_TYPE > >
812 || ::is_same < typename decay < RAW_TYPE >::RAW_TYPE_TAG,
raw_type_t >;
815template <
typename RAW_TYPE >
817 ::_primitive_raw_type < RAW_TYPE >
818 || (::std::is_bounded_array_v<RAW_TYPE>
822template <
typename POINTER >
824 ::is_same < typename decay <POINTER >::POINTER_TYPE_TAG,
pointer_type_t >;
826template <
typename OBJECT >
828 !::is_raw_pointer < OBJECT >
829 && !::is_function < OBJECT >
830 && !prototype_pointer2 < OBJECT >
831 && !prototype_raw_type < OBJECT >;
834template <
typename PARTICLE >
838template <
typename T,
typename TYPE >
839concept same_as = ::is_same < TYPE, erase_const_effemeral < T > >;
842template <
typename T,
typename TYPE >
843concept non_same_as = !::is_same < TYPE, erase_const_effemeral < T > >;
846template <
typename T,
typename TYPE >
850template <
typename T >
853template <
typename T >
856template <
typename T >
859template <
typename A_PARTICLE >
860concept a_particle = ::std::derived_from<A_PARTICLE, ::particle>;
862template <
typename NON_PARTICLE >
873template < prototype_
character CHARACTER >
874constexpr bool string_compare_prefix(::i32 & ordering,
const CHARACTER * pszA,
const CHARACTER * pszB)
noexcept;
876template < prototype_
character CHARACTER >
877constexpr bool string_order_prefix(::std::strong_ordering & ordering,
const CHARACTER * pszA,
const CHARACTER * pszB)
noexcept;
880template < prototype_fundamental TYPE >
881constexpr bool equals(TYPE a, TYPE b) {
return a == b; }
884template < prototype_type TYPE >
885constexpr bool equals(
const TYPE & a,
const TYPE & b) {
return a == b; }
888template<
typename A,
typename B>
889constexpr ::i32 compare(
const A &a,
const B &b)
891 if constexpr (
requires { a <=> b; })
913template<prototype_fundamental TYPEA, prototype_fundamental TYPEB>
914constexpr ::std::strong_ordering order(TYPEA a, TYPEB b)
916 return ::std::strong_order(a, b);
922template<prototype_type TYPEA, prototype_type TYPEB>
923constexpr ::std::strong_ordering order(
const TYPEA & a,
const TYPEB & b)
925 return ::std::strong_order(a, b);
930template<prototype_
character CHARACTER,
character_count m_sizeMaximumLength>
939template <
typename T >
943 { t.as(str) } -> std::same_as < void >;
950template <
typename CONTAINER >
954 {container.this_is_a_container()} -> std::same_as<void>;
959template <
typename ARRAY >
963 array.array_range_ok();
968template <
typename LIST >
977template <
typename MAP >
981 map.pair_map_base_ok();
986template <
typename ARRAY >
990 {array.element_at(i)}->prototype_raw_type;
995template <
typename ARRAY >
999 {array.element_at(i)}->prototype_raw_pointer;
1004template <
typename ARRAY >
1008 {array.element_at(i)}->prototype_pointer2;
1013template <
typename ARRAY >
1017 {array.element_at(i)}->prototype_object;
1022template <
typename CONTAINER >
1024 prototype_array < CONTAINER >
1025|| prototype_list < CONTAINER >
1026|| prototype_map < CONTAINER >;
1028template <
typename CONTAINER >
1033template < prototype_enum ENUM >
1034inline ::i64 as_i64(
const ENUM & e) {
return (::i64)(::raw_enum_of<ENUM>) e; }
1037template<
typename ITERATOR_TYPE>
1041template<
typename ITERATOR_TYPE>
1046using const_ansi_range = ::const_string_range < const ::ansi_character* >;
1047using const_wd16_range = ::const_string_range < const ::wd16_character* >;
1048using const_wd32_range = ::const_string_range < const ::wd32_character* >;
1049using const_wide_range = ::const_string_range < const ::wide_character* >;
1053template <
typename CONST_STRING_CASTABLE >
1055::std::is_convertible < CONST_STRING_CASTABLE, ::const_ansi_range >::value ||
1056::std::is_convertible < CONST_STRING_CASTABLE, ::string >::value ||
1057::std::is_convertible < CONST_STRING_CASTABLE, ::scoped_string >::value;
1060template <
typename CONST_STRING_CASTABLE >
1062::std::is_convertible < CONST_STRING_CASTABLE, ::string >::value ||
1063::std::is_convertible < CONST_STRING_CASTABLE, ::scoped_string >::value ||
1064::std::is_convertible < CONST_STRING_CASTABLE, const_char_pointer >::value;
1070template <
typename NON_SUBPARTICLE >
1074template<
typename Type,
typename RawType = Type, ::enum_type t_etypeContainer = e_type_element >
1078using string_array_base = string_base_array < string, string, e_type_string_array >;
1079using wstring_array_base = string_base_array < wstring, wstring >;
1082using string_array = ::comparable_array_particle < string_array_base >;
1083using wstring_array = ::comparable_array_particle < wstring_array_base >;
1086template <
typename POINTER_BUT_NO_INTEGRAL,
typename TYPE >
1087concept pointer_but_not_integral = ::std::convertible_to < POINTER_BUT_NO_INTEGRAL, TYPE * > && !prototype_integral < POINTER_BUT_NO_INTEGRAL >;
1091constexpr bool is_lvalue_reference =
false;
1094constexpr bool is_lvalue_reference<_Ty&> =
true;
1098constexpr _Ty&& land(_Ty&& t, non_reference < _Ty>& _Arg)
noexcept {
1099 return t =
static_cast<_Ty&&
>(_Arg);
1103constexpr _Ty&& land(_Ty&& t, non_reference < _Ty>&& _Arg)
noexcept
1105 static_assert(!is_lvalue_reference<_Ty>,
"bad argument");
1106 return t =
static_cast<_Ty&&
>(_Arg);
1109template <
typename T >
1126template <
typename T >
1129&& !::std::is_base_of_v < ::character_range< typename T::this_iterator >, T >;
Definition character_range.h:77
Definition _template_after_initial_concepts.h:15
Definition inline_string.h:12
Definition rectangle.h:49
Definition scoped_string_base.h:13
Definition string_array.h:47
Definition string_base.h:90
Definition aaa_want_to_remove_str_wstring.h:94
Definition _initial_concepts.h:810
Definition _initial_concepts.h:860
Definition _initial_concepts.h:247
Definition _initial_concepts.h:851
Definition _initial_concepts.h:142
Definition _initial_concepts.h:857
Definition _initial_concepts.h:306
Definition _initial_concepts.h:574
Definition _initial_concepts.h:570
Definition _initial_concepts.h:408
Definition _initial_concepts.h:405
Definition _initial_concepts.h:244
Definition _initial_concepts.h:241
Definition _initial_concepts.h:178
Definition _initial_concepts.h:1061
Definition _initial_concepts.h:1054
Definition _initial_concepts.h:1127
Definition _initial_concepts.h:951
Definition _initial_concepts.h:599
Definition _initial_concepts.h:696
Definition _initial_concepts.h:657
Definition _initial_concepts.h:1110
Definition _initial_concepts.h:541
Definition _initial_concepts.h:462
Definition _initial_concepts.h:470
Definition _initial_concepts.h:940
Definition _initial_concepts.h:854
Definition _initial_concepts.h:147
Definition _initial_concepts.h:1029
Definition _initial_concepts.h:863
Definition _initial_concepts.h:847
Definition _initial_concepts.h:1071
Definition _initial_concepts.h:165
Definition _initial_concepts.h:843
Definition _initial_concepts.h:320
Definition _initial_concepts.h:383
Definition _initial_concepts.h:294
Definition _initial_concepts.h:300
Definition _initial_concepts.h:558
Definition _initial_concepts.h:1087
Definition _initial_concepts.h:151
Definition _initial_concepts.h:156
Definition _aaa_other_initial_concepts.h:61
Definition _aaa_other_initial_concepts.h:87
Definition _aaa_other_initial_concepts.h:45
Definition _initial_concepts.h:111
Definition _initial_concepts.h:960
Definition _initial_concepts.h:545
Definition _initial_concepts.h:71
Definition _initial_concepts.h:61
Definition _initial_concepts.h:271
Definition _initial_concepts.h:253
Definition _initial_concepts.h:349
Definition _initial_concepts.h:367
Definition _initial_concepts.h:169
Definition _initial_concepts.h:535
Definition _initial_concepts.h:1023
Definition _aaa_other_initial_concepts.h:69
Definition _initial_concepts.h:64
Definition _initial_concepts.h:57
Definition _initial_concepts.h:106
Definition _initial_concepts.h:115
Definition _initial_concepts.h:88
Definition _initial_concepts.h:578
Definition _initial_concepts.h:84
Definition enumeration.h:9
Definition _initial_concepts.h:393
Definition _initial_concepts.h:969
Definition _initial_concepts.h:978
Definition _initial_concepts.h:91
Definition _initial_concepts.h:538
Definition _aaa_other_initial_concepts.h:13
Definition _initial_concepts.h:1014
Definition _initial_concepts.h:827
Definition _aaa_other_initial_concepts.h:107
Definition _initial_concepts.h:1005
Definition _initial_concepts.h:835
Definition _initial_concepts.h:529
Definition _aaa_other_initial_concepts.h:28
Definition _initial_concepts.h:823
Definition _aaa_other_initial_concepts.h:36
Definition _initial_concepts.h:124
Definition _initial_concepts.h:74
Definition _initial_concepts.h:53
Definition _initial_concepts.h:996
Definition _initial_concepts.h:987
Definition _initial_concepts.h:816
Definition _aaa_other_initial_concepts.h:77
Definition _initial_concepts.h:565
Definition _initial_concepts.h:31
Definition _initial_concepts.h:38
Definition _initial_concepts.h:44
Definition _initial_concepts.h:28
Definition _initial_concepts.h:97
Definition _initial_concepts.h:94
Definition _aaa_other_initial_concepts.h:53
Definition _initial_concepts.h:363
Definition _initial_concepts.h:548
Definition _initial_concepts.h:792
Definition _initial_concepts.h:118
Definition _initial_concepts.h:103
Definition _initial_concepts.h:100
Definition _aaa_other_initial_concepts.h:97
Definition _initial_concepts.h:160
Definition _aaa_other_initial_concepts.h:20
Definition _initial_concepts.h:839
Definition _initial_concepts.h:127
Definition _initial_concepts.h:607
Definition _initial_concepts.h:705
Definition _initial_concepts.h:666
Definition _initial_concepts.h:731
Definition _initial_concepts.h:313
Definition _initial_concepts.h:376
Definition _initial_concepts.h:289
Definition _initial_concepts.h:551
Definition _initial_concepts.h:136
Definition _initial_concepts.h:390
Definition _forward_declaration.h:2520
Definition _initial_concepts.h:397
Definition _initial_concepts.h:203
Definition _initial_concepts.h:185
Definition _initial_concepts.h:220
Definition _initial_concepts.h:14
Definition _initial_concepts.h:12
Definition _structures.h:21
Definition _structures.h:24
Definition _initial_concepts.h:13