From ab1b43a1a4733063d84806bdc47adebadd22b964 Mon Sep 17 00:00:00 2001 From: Dirk Thomas Date: Thu, 21 Feb 2019 16:48:05 -0800 Subject: [PATCH] try to fix Windows warning --- rosidl_generator_cpp/resource/msg__struct.hpp.em | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/rosidl_generator_cpp/resource/msg__struct.hpp.em b/rosidl_generator_cpp/resource/msg__struct.hpp.em index 8b09d170f..60c6f20b0 100644 --- a/rosidl_generator_cpp/resource/msg__struct.hpp.em +++ b/rosidl_generator_cpp/resource/msg__struct.hpp.em @@ -100,6 +100,8 @@ struct @(message.structure.type.name)_ init_list, alloc_list, member_list = create_init_alloc_and_member_lists(message) def generate_default_string(membset): + from rosidl_generator_cpp import msg_type_only_to_cpp + from rosidl_generator_cpp import msg_type_to_cpp strlist = [] for member in membset.members: if member.default_value is not None: @@ -107,7 +109,11 @@ def generate_default_string(membset): strlist.append('this->%s.resize(%d);' % (member.name, member.num_prealloc)) if isinstance(member.default_value, list): if all(v == member.default_value[0] for v in member.default_value): - strlist.append('std::fill(this->%s.begin(), this->%s.end(), %s);' % (member.name, member.name, member.default_value[0])) + # Specifying type for std::fill because of MSVC 14.12 warning about casting 'const int' to smaller types (C4244) + # For more info, see https://github.com/ros2/rosidl/issues/309 + # TODO(jacobperron): Investigate reason for build warnings on Windows + # TODO(jacobperron): Write test case for this path of execution + strlist.append('std::fill(this->%s.begin(), this->%s.end(), %s);' % (msg_type_to_cpp(member.type), msg_type_only_to_cpp(member.type), member.name, member.name, member.default_value[0])) else: for index, val in enumerate(member.default_value): strlist.append('this->%s[%d] = %s;' % (member.name, index, val)) @@ -118,6 +124,7 @@ def generate_default_string(membset): def generate_zero_string(membset, fill_args): from rosidl_generator_cpp import msg_type_only_to_cpp + from rosidl_generator_cpp import msg_type_to_cpp strlist = [] for member in membset.members: if isinstance(member.zero_value, list): @@ -126,7 +133,10 @@ def generate_zero_string(membset, fill_args): if member.zero_need_array_override: strlist.append('this->%s.fill(%s{%s});' % (member.name, msg_type_only_to_cpp(member.type), fill_args)) else: - strlist.append('std::fill(this->%s.begin(), this->%s.end(), %s);' % (member.name, member.name, member.zero_value[0])) + # Specifying type for std::fill because of MSVC 14.12 warning about casting 'const int' to smaller types (C4244) + # For more info, see https://github.com/ros2/rosidl/issues/309 + # TODO(jacobperron): Investigate reason for build warnings on Windows + strlist.append('std::fill(this->%s.begin(), this->%s.end(), %s);' % (msg_type_to_cpp(member.type), msg_type_only_to_cpp(member.type), member.name, member.name, member.zero_value[0])) else: strlist.append('this->%s = %s;' % (member.name, member.zero_value)) return strlist