diff --git a/rosidl_runtime_cpp/include/rosidl_runtime_cpp/traits.hpp b/rosidl_runtime_cpp/include/rosidl_runtime_cpp/traits.hpp index 5a4773c66..bccd9a520 100644 --- a/rosidl_runtime_cpp/include/rosidl_runtime_cpp/traits.hpp +++ b/rosidl_runtime_cpp/include/rosidl_runtime_cpp/traits.hpp @@ -129,14 +129,20 @@ inline void value_to_yaml(const std::string & value, std::ostream & out) inline void value_to_yaml(const std::u16string & value, std::ostream & out) { out << "\""; +#if __cplusplus < 201703L std::wstring_convert, char16_t> convert; +#endif auto flags = out.flags(); size_t index = 0; while (index < value.size()) { uint_least16_t character = static_cast(value[index]); if (!(character & 0xff80)) { // ASCII +#if __cplusplus < 201703L std::string character_as_string = convert.to_bytes(character); out << std::hex << character_as_string.c_str(); +#else + out << static_cast(character); +#endif } else if (!(character & 0xff00)) { // only 1 byte set out << "\\x" << std::hex << std::setw(2) << std::setfill('0') << \ character;