diff --git a/rosidl_generator_cpp/resource/msg__struct.hpp.em b/rosidl_generator_cpp/resource/msg__struct.hpp.em index 02097f15e..6d1c1363b 100644 --- a/rosidl_generator_cpp/resource/msg__struct.hpp.em +++ b/rosidl_generator_cpp/resource/msg__struct.hpp.em @@ -377,8 +377,11 @@ template const @(MSG_TYPE_TO_CPP['wstring']) @(message.structure.namespaced_type.name)_::@(c.name) = u"@(escape_wstring(c.value))"; @[ else ]@ +#if __cplusplus < 201703L +// static constexpr member variable definitions are only needed in C++14 and below, deprecated in C++17 template constexpr @(MSG_TYPE_TO_CPP[c.type.typename]) @(message.structure.namespaced_type.name)_::@(c.name); +#endif // __cplusplus < 201703L @[ end if]@ @[ if c.name in msvc_common_macros]@ #if defined(_WIN32) diff --git a/rosidl_typesupport_introspection_cpp/cmake/rosidl_typesupport_introspection_cpp_generate_interfaces.cmake b/rosidl_typesupport_introspection_cpp/cmake/rosidl_typesupport_introspection_cpp_generate_interfaces.cmake index 406181d77..c44a136eb 100644 --- a/rosidl_typesupport_introspection_cpp/cmake/rosidl_typesupport_introspection_cpp_generate_interfaces.cmake +++ b/rosidl_typesupport_introspection_cpp/cmake/rosidl_typesupport_introspection_cpp_generate_interfaces.cmake @@ -100,11 +100,12 @@ if(rosidl_generate_interfaces_LIBRARY_NAME) endif() set_property(TARGET ${rosidl_generate_interfaces_TARGET}${_target_suffix} PROPERTY DEFINE_SYMBOL "ROSIDL_TYPESUPPORT_INTROSPECTION_CPP_BUILDING_DLL") +set_property(TARGET ${rosidl_generate_interfaces_TARGET}${_target_suffix} + PROPERTY CXX_STANDARD 17) + if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") - set_target_properties(${rosidl_generate_interfaces_TARGET}${_target_suffix} PROPERTIES - CXX_STANDARD 17 - COMPILE_OPTIONS -Wall -Wextra -Wpedantic - ) + target_compile_options(${rosidl_generate_interfaces_TARGET}${_target_suffix} + PRIVATE -Wall -Wextra -Wpedantic) endif() target_include_directories(${rosidl_generate_interfaces_TARGET}${_target_suffix}