11 #include <initializer_list> 12 #include "boost/algorithm/string/replace.hpp" 13 #include "Arp/System/Core/BasicFormatter.hxx" 14 #include "Arp/System/Core/Impl/BasicStringFormatExceptionHandler.hpp" 16 #ifndef ARP_INSIDE_ARP_H 17 #error Never include 'BasicString.hxx' directly, just include 'Arp.h' 25 template<
class C,
class Alloc = std::allocator<C>>
29 typedef Alloc Allocator;
31 typedef BasicString<CharType, Allocator> SelfType;
32 typedef std::basic_string<CharType, std::char_traits<CharType>, Allocator> BaseString;
35 typedef Allocator allocator_type;
36 typedef CharType value_type;
37 typedef typename BaseString::size_type size_type;
38 typedef typename BaseString::difference_type difference_type;
39 typedef typename BaseString::reference reference;
40 typedef typename BaseString::const_reference const_reference;
41 typedef typename Allocator::pointer pointer;
42 typedef typename Allocator::const_pointer const_pointer;
43 typedef typename BaseString::iterator iterator;
44 typedef typename BaseString::const_iterator const_iterator;
45 typedef typename BaseString::reverse_iterator reverse_iterator;
46 typedef typename BaseString::const_reverse_iterator const_reverse_iterator;
49 using BasicFormatterType = BasicFormatter<CharType, Allocator>;
57 BasicString(
const SelfType& arg)
58 : baseString(arg.baseString)
62 BasicString(
const SelfType& arg,
const Allocator& alloc)
63 : baseString(arg.baseString, alloc)
67 explicit BasicString(
const Allocator& alloc)
72 BasicString(
const SelfType& arg, size_type offset, size_type count = NPos)
73 : baseString(arg.baseString, offset, count)
77 BasicString(
const SelfType& arg, size_type offset, size_type count,
const Allocator& alloc)
78 : baseString(arg.baseString, offset, count, alloc)
82 BasicString(
const CharType* pChars, size_type count)
83 : baseString(pChars, count)
87 BasicString(
const CharType* pChars, size_type count,
const Allocator& alloc)
88 : baseString(pChars, count, alloc)
92 BasicString(
const CharType* pChars)
97 BasicString(
const CharType* pChars,
const Allocator& alloc)
98 : baseString(pChars, alloc)
102 BasicString(size_type count, CharType c)
103 : baseString(count, c)
107 BasicString(size_type count, CharType c,
const Allocator& alloc)
108 : baseString(count, c, alloc)
112 BasicString(SelfType&& arg)
113 : baseString(arg.baseString)
117 BasicString(SelfType&& arg,
const Allocator& alloc)
118 : baseString(arg.baseString, alloc)
122 BasicString(std::initializer_list<CharType> initList,
const Allocator& alloc = Allocator())
123 : baseString(initList, alloc)
127 BasicString(iterator first, iterator last,
const Allocator& alloc = Allocator())
128 : baseString(first, last, alloc)
132 BasicString(const_iterator first, const_iterator last,
const Allocator& alloc = Allocator())
133 : baseString(first, last, alloc)
137 BasicString(
const BaseString& arg)
142 BasicString(BaseString&& arg)
152 static const size_type NPos = size_type(-1);
153 static const SelfType Empty;
154 static const SelfType NewLine;
157 SelfType& operator=(SelfType&& right)
159 this->baseString = right.baseString;
163 SelfType& operator=(std::initializer_list<CharType> right)
165 this->baseString = right;
169 SelfType& operator=(
const SelfType& right)
171 this->baseString = right.baseString;
175 SelfType& operator=(
const CharType* pRight)
177 this->baseString = pRight;
181 SelfType& operator=(CharType c)
183 this->baseString = c;
188 SelfType& operator+=(std::initializer_list<CharType> right)
190 this->baseString += right;
194 SelfType& operator+=(
const SelfType& right)
196 this->baseString += right.baseString;
200 SelfType& operator+=(
const CharType* pRight)
202 this->baseString += pRight;
206 SelfType& operator+=(CharType c)
208 this->baseString += c;
214 SelfType& Assign(SelfType&& right)
216 this->baseString.assign(right.baseString);
220 SelfType& Assign(std::initializer_list<CharType> initList)
222 this->baseString.assign(initList);
226 SelfType& Assign(
const SelfType& right)
228 this->baseString.assign(right.baseString);
232 SelfType& Assign(
const SelfType& right, size_type offset, size_type count = NPos)
234 this->baseString.assign(right.baseString, offset, count);
238 SelfType& Assign(
const BaseString& right)
240 this->baseString.assign(right);
244 SelfType& Assign(BaseString&& right)
246 this->baseString.assign(right);
250 SelfType& Assign(
const CharType* pChars, size_type count)
252 this->baseString.assign(pChars, count);
256 SelfType& Assign(
const CharType* pChars)
258 this->baseString.assign(pChars);
262 SelfType& Assign(size_type count, CharType c)
264 this->baseString.assign(count, c);
268 SelfType& Assign(iterator first, iterator last)
270 this->baseString.assign(first, last);
274 SelfType& Assign(const_iterator first, const_iterator last)
276 this->baseString.assign(first, last);
280 SelfType& Assign(const_pointer first, const_pointer last)
282 this->baseString.assign(first, last);
288 SelfType& Append(std::initializer_list<CharType> initList)
290 this->baseString.append(initList);
294 SelfType& Append(
const SelfType& right)
296 this->baseString.append(right.baseString);
300 SelfType& Append(
const SelfType& right, size_type offset, size_type count = NPos)
302 this->baseString.append(right.baseString, offset, count);
306 SelfType& Append(
const CharType* pChars, size_type count)
308 this->baseString.append(pChars, count);
312 SelfType& Append(
const CharType* pChars)
314 this->baseString.append(pChars);
318 SelfType& Append(size_type count, CharType c)
320 this->baseString.append(count, c);
324 SelfType& Append(iterator first, iterator last)
326 this->baseString.append(first, last);
330 SelfType& Append(const_iterator first, const_iterator last)
332 this->baseString.append(first, last);
336 SelfType& Append(const_pointer first, const_pointer last)
338 this->baseString.append(first, last);
344 iterator Insert(const_iterator where, std::initializer_list<CharType> initList)
346 return this->baseString.insert(where, initList);
349 SelfType& Insert(size_type offset,
const SelfType& right)
351 this->baseString.insert(offset, right.baseString);
355 SelfType& Insert(size_type offset,
const SelfType& right, size_type rightOffset, size_type count = NPos)
357 this->baseString.insert(offset, right.baseString, rightOffset, count);
361 SelfType& Insert(size_type offset,
const CharType* pChars, size_type count)
363 this->baseString.insert(offset, pChars, count);
367 SelfType& Insert(size_type offset,
const CharType* pChars)
369 this->baseString.insert(offset, pChars);
373 SelfType& Insert(size_type offset, size_type count, CharType c)
375 this->baseString.insert(offset, count, c);
379 iterator Insert(const_iterator where)
381 return this->baseString.insert(where);
384 iterator Insert(const_iterator where, CharType c)
386 return this->baseString.insert(where, c);
389 iterator Insert(const_iterator where, size_type count, CharType c)
391 return this->baseString.insert(where, count, c);
394 iterator Insert(const_iterator where, iterator first, iterator last)
396 return this->baseString.insert(where, first, last);
399 iterator Insert(const_iterator where, const_iterator first, const_iterator last)
401 return this->baseString.insert(where, first, last);
404 iterator Insert(const_iterator where, const_pointer first, const_pointer last)
406 return this->baseString.insert(where, first, last);
411 SelfType& Erase(size_type offset = 0)
413 this->baseString.erase(offset);
417 SelfType& Erase(size_type offset, size_type count)
419 this->baseString.erase(offset, count);
423 iterator Erase(const_iterator where)
425 return this->baseString.erase(where);
428 iterator Erase(const_iterator first, const_iterator last)
430 return this->baseString.erase(first, last);
435 SelfType& Replace(const_iterator first, const_iterator last, std::initializer_list<CharType> initList)
437 this->baseString.replace(first, last, initList);
441 SelfType& Replace(size_type offset, size_type length,
const SelfType& right)
443 this->baseString.replace(offset, length, right.baseString);
447 SelfType& Replace(size_type offset, size_type length,
const SelfType& right, size_type offsetRight, size_type count = NPos)
449 this->baseString.replace(offset, length, right.baseString, offsetRight, count);
453 SelfType& Replace(size_type offset, size_type length,
const CharType* pChars, size_type count)
455 this->baseString.replace(offset, length, pChars, offset, count);
459 SelfType& Replace(size_type offset, size_type length,
const CharType* pChars)
461 this->baseString.replace(offset, length, pChars);
465 SelfType& Replace(size_type offset, size_type length, size_type count, CharType c)
467 this->baseString.replace(offset, length, count, c);
471 SelfType& Replace(const_iterator first, const_iterator last,
const SelfType& right)
473 this->baseString.replace(first, last, right.baseString);
477 SelfType& Replace(const_iterator first, const_iterator last,
const CharType* pChars, size_type count)
479 this->baseString.replace(first, last, pChars, count);
483 SelfType& Replace(const_iterator first, const_iterator last,
const CharType* pChars)
485 this->baseString.replace(first, last, pChars);
489 SelfType& Replace(const_iterator first, const_iterator last, size_type count, CharType c)
491 this->baseString.replace(first, last, count, c);
495 SelfType& Replace(const_iterator first, const_iterator last, iterator first2, iterator last2)
497 this->baseString.replace(first, last, first2, last2);
501 SelfType& Replace(const_iterator first, const_iterator last, const_iterator first2, const_iterator last2)
503 this->baseString.replace(first, last, first2, last2);
507 SelfType& Replace(const_iterator first, const_iterator last, const_pointer first2, const_pointer last2)
509 this->baseString.replace(first, last, first2, last2);
513 SelfType& Replace(const_iterator first, const_iterator last, pointer first2, pointer last2)
515 this->baseString.replace(first, last, first2, last2);
521 SelfType& ReplaceAll(
const SelfType& search,
const SelfType& replacement)
523 boost::replace_all(this->baseString, search.baseString, replacement.baseString);
531 return this->baseString.begin();
534 const_iterator begin()
const 536 return this->baseString.begin();
541 return this->baseString.end();
544 const_iterator end()
const 546 return this->baseString.end();
554 return this->baseString.begin();
557 const_iterator Begin()
const 559 return this->baseString.begin();
564 return this->baseString.end();
567 const_iterator End()
const 569 return this->baseString.end();
572 reverse_iterator ReverseBegin()
574 return this->baseString.rbegin();
577 const_reverse_iterator ReverseBegin()
const 579 return this->baseString.rbegin();
582 reverse_iterator ReverseEnd()
584 return this->baseString.rend();
587 const_reverse_iterator ReverseEnd()
const 589 return this->baseString.rend();
592 const_iterator ConstBegin()
const 594 return this->baseString.cbegin();
597 const_iterator ConstEnd()
const 599 return this->baseString.cend();
602 const_reverse_iterator ConstReverseBegin()
const 604 return this->baseString.crbegin();
607 const_reverse_iterator ConstReverseEnd()
const 609 return this->baseString.crend();
614 this->baseString.shrink_to_fit();
617 void PushBack(CharType c)
619 this->baseString.push_back(c);
624 this->baseString.pop_back();
629 return this->baseString.front();
632 const_reference Front()
const 634 return this->baseString.front();
639 return this->baseString.back();
642 const_reference Back()
const 644 return this->baseString.back();
647 const_reference At(size_type offset)
const 649 return this->baseString.at(offset);
652 reference operator[](size_type offset)
654 return this->baseString[offset];
657 const_reference operator[](size_type offset)
const 659 return this->baseString[offset];
664 size_type Length()
const 666 return this->baseString.length();
669 size_type Size()
const 671 return this->baseString.size();
674 size_type MaxSize()
const 676 return this->baseString.max_size();
679 size_type Capacity()
const 681 return this->baseString.capacity();
686 return this->baseString.empty();
689 void Resize(size_type newSize)
691 this->baseString.resize(newSize);
694 void Resize(size_type newSize, CharType c)
696 this->baseString.resize(newSize, c);
699 void Reserve(size_type newCapacity = 0)
701 this->baseString.reserve(newCapacity);
706 this->baseString.clear();
711 size_type Find(
const SelfType& right, size_type offset = 0)
const 713 return this->baseString.find(right.baseString, offset);
716 size_type Find(
const CharType* pChars, size_type offset, size_type count)
const 718 return this->baseString.find(pChars, offset, count);
721 size_type Find(
const CharType* pChars, size_type offset = 0)
const 723 return this->baseString.find(pChars, offset);
726 size_type Find(CharType c, size_type offset = 0)
const 728 return this->baseString.find(c, offset);
731 size_type ReverseFind(
const SelfType& right, size_type offset = NPos)
const 733 return this->baseString.rfind(right.baseString, offset);
736 size_type ReverseFind(
const CharType* pChars, size_type offset, size_type count)
const 738 return this->baseString.rfind(pChars, offset, count);
741 size_type ReverseFind(
const CharType* pChars, size_type offset = NPos)
const 743 return this->baseString.rfind(pChars, offset);
746 size_type ReverseFind(CharType c, size_type offset = NPos)
const 748 return this->baseString.rfind(c, offset);
751 size_type FindFirstOf(
const SelfType& right, size_type offset = 0)
const 753 return this->baseString.find_first_of(right.baseString, offset);
756 size_type FindFirstOf(
const CharType* pChars, size_type offset, size_type count)
const 758 return this->baseString.find_first_of(pChars, offset, count);
761 size_type FindFirstOf(
const CharType* pChars, size_type offset = 0)
const 763 return this->baseString.find_first_of(pChars, offset);
766 size_type FindFirstOf(CharType c, size_type offset = 0)
const 768 return this->baseString.find_first_of(c, offset);
771 size_type FindLastOf(
const SelfType& right, size_type offset = NPos)
const 773 return this->baseString.find_last_of(right.baseString, offset);
776 size_type FindLastOf(
const CharType* pChars, size_type offset, size_type count)
const 778 return this->baseString.find_last_of(pChars, offset, count);
781 size_type FindLastOf(
const CharType* pChars, size_type offset = NPos)
const 783 return this->baseString.find_last_of(pChars, offset);
786 size_type FindLastOf(CharType c, size_type offset = NPos)
const 788 return this->baseString.find_last_of(c, offset);
791 size_type FindFirstNotOf(
const SelfType& right, size_type offset = 0)
const 793 return this->baseString.find_first_not_of(right.baseString, offset);
796 size_type FindFirstNotOf(
const CharType* pChars, size_type offset, size_type count)
const 798 return this->baseString.find_first_not_of(pChars, offset, count);
801 size_type FindFirstNotOf(
const CharType *pChars, size_type offset = 0)
const 803 return this->baseString.find_first_not_of(pChars, offset);
806 size_type FindFirstNotOf(CharType c, size_type offset = 0)
const 808 return this->baseString.find_first_not_of(c, offset);
811 size_type FindLastNotOf(
const SelfType& right, size_type offset = NPos)
const 813 return this->baseString.find_last_not_of(right.baseString, offset);
816 size_type FindLastNotOf(
const CharType *pChars, size_type offset, size_type count)
const 818 return this->baseString.find_last_not_of(pChars, offset, count);
821 size_type FindLastNotOf(
const CharType *pChars, size_type offset = NPos)
const 823 return this->baseString.find_last_not_of(pChars, offset);
826 size_type FindLastNotOf(CharType c, size_type offset = NPos)
const 828 return this->baseString.find_last_not_of(c, offset);
833 int Compare(
const SelfType& right)
const 835 return this->baseString.compare(right.baseString);
838 int Compare(size_type offset, size_type count,
const SelfType& right)
const 840 return this->baseString.compare(offset, count, right.baseString);
843 int Compare(size_type offset, size_type count,
const SelfType& right, size_type offsetRight, size_type countRight = NPos)
const 845 return this->baseString.compare(offset, count, right.baseString, offsetRight, countRight);
848 int Compare(
const CharType *pChars)
const 850 return this->baseString.compare(pChars);
853 int Compare(size_type offset, size_type count,
const CharType *pChars)
const 855 return this->baseString.compare(offset, count, pChars);
858 int Compare(size_type offset, size_type count,
const CharType *pChars, size_type countChars)
const 860 return this->baseString.compare(offset, count, pChars, countChars);
864 bool StartWith(
const CharType *pChars)
const 866 return this->Find(pChars) == 0;
869 bool StartWith(
const SelfType& pattern)
const 871 return this->Find(pattern) == 0;
876 template<
typename... Args>
877 static SelfType Format(
const SelfType& format,
const Args& ... args)
879 return Format(format.CStr(), args...);
882 template<
typename... Args>
883 static SelfType Format(
const char* format,
const Args& ... args)
889 const BaseString& GetBaseString()
const 891 return this->baseString;
894 const CharType* CStr()
const 896 return this->baseString.c_str();
899 operator const CharType*()
const 901 return this->baseString.data();
904 operator const BaseString& ()
const 906 return this->baseString;
909 SelfType Substr(size_type offset = 0, size_type count = NPos)
const 911 return SelfType(this->baseString.substr(offset, count));
914 Allocator GetAllocator()
const 916 return this->baseString.get_allocator();
919 void Swap(SelfType& right)
921 this->baseString.swap(right.baseString);
931 BaseString baseString;
936 template <
class CharType,
class Alloc>
937 const BasicString<CharType, Alloc> BasicString<CharType, Alloc>::Empty;
939 template <
class CharType,
class Alloc>
940 const BasicString<CharType, Alloc> BasicString<CharType, Alloc>::NewLine((CharType)
'\n', (CharType)
'\r');
944 template<
class CharType,
class Alloc>
945 inline void swap(BasicString<CharType, Alloc>& left, BasicString<CharType, Alloc>& right)
950 template<
class CharType,
class Alloc>
951 inline std::ostream& operator<<(std::ostream& os, const BasicString<CharType, Alloc>& right)
953 os << right.GetBaseString();
957 template<
class CharType,
class Alloc>
958 inline std::istream& operator>>(std::istream& is, BasicString<CharType, Alloc>& right)
960 std::basic_string<CharType, std::char_traits<CharType>, Alloc> baseString;
962 right.Assign(baseString);
966 template<
class CharType,
class Alloc>
967 inline BasicString<CharType, Alloc> operator+(
968 const BasicString<CharType, Alloc>& left,
969 const BasicString<CharType, Alloc>& right)
971 return left.GetBaseString() + right.GetBaseString();
974 template<
class CharType,
class Alloc>
975 inline BasicString<CharType, Alloc> operator+(
976 const CharType* left,
977 const BasicString<CharType, Alloc>& right)
979 return left + right.GetBaseString();
982 template<
class CharType,
class Alloc>
983 inline BasicString<CharType, Alloc> operator+(
985 const BasicString<CharType, Alloc>& right)
987 return left + right.GetBaseString();
990 template<
class CharType,
class Alloc>
991 inline BasicString<CharType, Alloc> operator+(
992 const BasicString<CharType, Alloc>& left,
993 const CharType* right)
995 return left.GetBaseString() + right;
998 template<
class CharType,
class Alloc>
999 inline BasicString<CharType, Alloc> operator+(
1000 const BasicString<CharType, Alloc>& left,
1001 const CharType right)
1003 return left.GetBaseString() + right;
1006 template<
class CharType,
class Alloc>
1007 inline BasicString<CharType, Alloc> operator+(
1008 const BasicString<CharType, Alloc>& left,
1009 BasicString<CharType, Alloc>&& right)
1011 return left.GetBaseString() + right.GetBaseString();
1014 template<
class CharType,
class Alloc>
1015 inline BasicString<CharType, Alloc> operator+(
1016 BasicString<CharType, Alloc>&& left,
1017 const BasicString<CharType, Alloc>& right)
1019 return (std::move(left.Append(right)));
1022 template<
class CharType,
class Alloc>
1023 inline BasicString<CharType, Alloc> operator+(
1024 BasicString<CharType, Alloc>&& left,
1025 BasicString<CharType, Alloc>&& right)
1027 return left.GetBaseString() + right.GetBaseString();
1030 template<
class CharType,
class Alloc>
1031 inline BasicString<CharType, Alloc> operator+(
1032 const CharType* left,
1033 BasicString<CharType, Alloc>&& right)
1035 return left + right.GetBaseString();
1038 template<
class CharType,
class Alloc>
1039 inline BasicString<CharType, Alloc> operator+(
1040 const CharType left,
1041 BasicString<CharType, Alloc>&& right)
1043 return left + right.GetBaseString();
1046 template<
class CharType,
class Alloc>
1047 inline BasicString<CharType, Alloc> operator+(
1048 BasicString<CharType, Alloc>&& left,
1049 const CharType* right)
1051 return left.GetBaseString() + right;
1054 template<
class CharType,
class Alloc>
1055 inline BasicString<CharType, Alloc> operator+(
1056 BasicString<CharType, Alloc>&& left,
1057 const CharType right)
1059 return left.GetBaseString() + right;
1062 template<
class CharType,
class Alloc>
1063 inline bool operator==(
1064 const BasicString<CharType, Alloc>& left,
1065 const BasicString<CharType, Alloc>& right)
1067 return left.GetBaseString() == right.GetBaseString();
1070 template<
class CharType,
class Alloc>
1071 inline bool operator==(
1072 const CharType* left,
1073 const BasicString<CharType, Alloc>& right)
1075 return left == right.GetBaseString();
1078 template<
class CharType,
class Alloc>
1079 inline bool operator==(
1080 const BasicString<CharType, Alloc>& left,
1081 const CharType* right)
1083 return left.GetBaseString() == right;
1086 template<
class CharType,
class Alloc>
1087 inline bool operator!=(
1088 const BasicString<CharType, Alloc>& left,
1089 const BasicString<CharType, Alloc>& right)
1091 return (!(left == right));
1094 template<
class CharType,
class Alloc>
1095 inline bool operator!=(
1096 const CharType *left,
1097 const BasicString<CharType, Alloc>& right)
1099 return (!(left == right));
1102 template<
class CharType,
class Alloc>
1103 inline bool operator!=(
1104 const BasicString<CharType, Alloc>& left,
1105 const CharType* right)
1107 return (!(left == right));
1110 template<
class CharType,
class Alloc>
1111 inline bool operator<(
1112 const BasicString<CharType, Alloc>& left,
1113 const BasicString<CharType, Alloc>& right)
1115 return left.GetBaseString() < right.GetBaseString();
1118 template<
class CharType,
class Alloc>
1119 inline bool operator<(
1120 const CharType* left,
1121 const BasicString<CharType, Alloc>& right)
1123 return left < right.GetBaseString();
1126 template<
class CharType,
class Alloc>
1127 inline bool operator<(
1128 const BasicString<CharType, Alloc>& left,
1129 const CharType* right)
1131 return left.GetBaseString() == right;
1134 template<
class CharType,
class Alloc>
1135 inline bool operator>(
1136 const BasicString<CharType, Alloc>& left,
1137 const BasicString<CharType, Alloc>& right)
1139 return (right < left);
1142 template<
class CharType,
class Alloc>
1143 inline bool operator>(
1144 const CharType* left,
1145 const BasicString<CharType, Alloc>& right)
1147 return (right < left);
1150 template<
class CharType,
class Alloc>
1151 inline bool operator>(
1152 const BasicString<CharType, Alloc>& left,
1153 const CharType* right)
1155 return (right < left);
1158 template<
class CharType,
class Alloc>
1159 inline bool operator<=(
1160 const BasicString<CharType, Alloc>& left,
1161 const BasicString<CharType, Alloc>& right)
1163 return (!(right < left));
1166 template<
class CharType,
class Alloc>
1167 inline bool operator<=(
1168 const CharType* left,
1169 const BasicString<CharType, Alloc>& right)
1171 return (!(right < left));
1174 template<
class CharType,
class Alloc>
1175 inline bool operator<=(
1176 const BasicString<CharType, Alloc>& left,
1177 const CharType* right)
1179 return (!(right < left));
1182 template<
class CharType,
class Alloc>
1183 inline bool operator>=(
1184 const BasicString<CharType, Alloc>& left,
1185 const BasicString<CharType, Alloc>& right)
1187 return (!(left < right));
1190 template<
class CharType,
class Alloc>
1191 inline bool operator>=(
1192 const CharType* left,
1193 const BasicString<CharType, Alloc>& right)
1195 return (!(left < right));
1198 template<
class CharType,
class Alloc>
1199 inline bool operator>=(
1200 const BasicString<CharType, Alloc>& left,
1201 const CharType* right)
1203 return (!(left < right));
1214 template<
class CharType,
class Alloc>
1215 struct hash<
Arp::BasicString<CharType, Alloc>>
1218 typedef typename Arp::BasicString<CharType, Alloc>::BaseString BaseString;
1222 typedef size_t result_type;
1225 result_type operator()(
const argument_type& key)
const 1227 return std::hash<BaseString>()(key.GetBaseString());
Namespace of the C++ standard library
Definition: BasicFormatter.hxx:18
Root namespace for the PLCnext API