Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions include/vsg/io/convert_utf.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,37 @@ namespace vsg

inline void convert_utf(const std::string& src, std::string& dst) { dst = src; }
inline void convert_utf(const std::wstring& src, std::wstring& dst) { dst = src; }

#if defined(__cpp_char8_t)
inline void convert_utf(const std::u8string& src, std::u8string& dst) { dst = src; }
inline void convert_utf(const std::wstring& src, std::u8string& dst) { std::string temp_dst; convert_utf(src, temp_dst); dst.assign(temp_dst.begin(), temp_dst.end()); }
inline void convert_utf(const std::u8string& src, std::wstring& dst) { std::string temp_src(src.begin(), src.end()); convert_utf(temp_src, dst); }

inline void convert_utf(const char8_t c, std::u8string& dst)
{
dst.clear();
dst.push_back(c);
}
inline void convert_utf(const char8_t c, std::string& dst)
{
dst.clear();
dst.push_back(c);
}
inline void convert_utf(const char8_t c, std::wstring& dst)
{
dst.clear();
dst.push_back(static_cast<wchar_t>(c));
}

template<typename T>
T convert_utf(const std::u8string& src)
{
T dst;
convert_utf(src, dst);
return dst;
}
#endif

inline void convert_utf(const char c, std::string& dst)
{
dst.clear();
Expand Down
19 changes: 18 additions & 1 deletion src/vsg/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -411,7 +411,24 @@ ASSIGN_SOURCE_GROUPS("Header Files" "${VSG_SOURCE_DIR}/include/vsg" ${HEADERS})
set_property(TARGET vsg PROPERTY VERSION ${VSG_VERSION_MAJOR}.${VSG_VERSION_MINOR}.${VSG_VERSION_PATCH})
set_property(TARGET vsg PROPERTY SOVERSION ${VSG_SOVERSION})
set_property(TARGET vsg PROPERTY POSITION_INDEPENDENT_CODE ON)
target_compile_features(vsg PUBLIC cxx_std_17)

# set up the C++ Standard used
if (NOT CMAKE_CXX_STANDARD)
# no CMAKE_CXX_STANDARD explicitly defined so default to 17
target_compile_features(vsg PUBLIC cxx_std_17)
elseif (${CMAKE_CXX_STANDARD} EQUAL 17)
target_compile_features(vsg PUBLIC cxx_std_17)
elseif (${CMAKE_CXX_STANDARD} EQUAL 20)
target_compile_features(vsg PUBLIC cxx_std_20) # CMake minimum version 3.12
elseif (${CMAKE_CXX_STANDARD} EQUAL 23)
target_compile_features(vsg PUBLIC cxx_std_23) # CMake minimum version 3.20
elseif (${CMAKE_CXX_STANDARD} EQUAL 26)
target_compile_features(vsg PUBLIC cxx_std_26) # CMake minimum version 3.30
else()
message(FATAL_ERROR "Invalid CMAKE_CXX_STANDARD value of " ${CMAKE_CXX_STANDARD} ", supported values are 17, 20 or 23.")
endif()


if(WIN32)
set_property(TARGET vsg PROPERTY RUNTIME_OUTPUT_NAME vsg-${VSG_SOVERSION})
endif()
Expand Down
Loading