function(DECIDE_CXX_STANDERD)
    if(MSVC)
        if(MSVC_VERSION GREATER_EQUAL 1910)
            set(STRING_SPLIT_DEFAULT_CXX_STANDARD 17)
        else()
            set(STRING_SPLIT_DEFAULT_CXX_STANDARD 14)
        endif()
    elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
        if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 4.0)
            set(STRING_SPLIT_DEFAULT_CXX_STANDARD 17)
        else()
            set(STRING_SPLIT_DEFAULT_CXX_STANDARD 14)
        endif()
    elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
        if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 7.1)
            set(STRING_SPLIT_DEFAULT_CXX_STANDARD 17)
        else()
            set(STRING_SPLIT_DEFAULT_CXX_STANDARD 14)
        endif()
    else()
        set(STRING_SPLIT_DEFAULT_CXX_STANDARD 14)
    endif()
    message("default CMAKE_CXX_STANDARD:${STRING_SPLIT_DEFAULT_CXX_STANDARD}")
    set(CMAKE_CXX_STANDARD "${STRING_SPLIT_DEFAULT_CXX_STANDARD}" CACHE STRING "C++ version")
    message("CMAKE_CXX_STANDARD:${CMAKE_CXX_STANDARD}")
    if(CMAKE_CXX_STANDARD LESS 14)
        message(FATAL_ERROR "Specify C++14 or later")
    endif()
endfunction()