#pragma once #include #include // output operators must be in same namespace as the type itself namespace std { #ifdef __cpp_char8_t std::ostream& operator<<(std::ostream& os, std::basic_string const& s); #endif std::ostream& operator<<(std::ostream& os, std::basic_string const& s); std::ostream& operator<<(std::ostream& os, std::basic_string const& s); #ifdef __cpp_char8_t std::ostream& operator<<(std::ostream& os, utf8_t const& c); #endif std::ostream& operator<<(std::ostream& os, char16_t const& c); std::ostream& operator<<(std::ostream& os, char32_t const& c); } // namespace std template std::basic_string std_convert(const std::basic_string& s); template<> std::basic_string std_convert(const std::basic_string& s); template<> std::basic_string std_convert(const std::basic_string& s); template<> std::basic_string std_convert(const std::basic_string& s); template<> std::basic_string std_convert(const std::basic_string& s); template<> std::basic_string std_convert(const std::basic_string& s); template<> std::basic_string std_convert(const std::basic_string& s); template<> std::basic_string std_convert(const std::basic_string& s); template<> std::basic_string std_convert(const std::basic_string& s); template<> std::basic_string std_convert(const std::basic_string& s);