From d993377d14e70a770bb743edf7d0a41137789ddc Mon Sep 17 00:00:00 2001 From: themoox Date: Tue, 27 Sep 2022 15:15:30 -0400 Subject: [PATCH] Fix MSVC C4244 narrowing conversion warning on 64-bit Windows. (#10647) The difference_type (ptrdiff_t) is a narrowing conversion to size_type (int). MSVC 2019 C++17 issues a C4244 warning about the initialization. Co-authored-by: Mike Kruskal <62662355+mkruskal-google@users.noreply.github.com> --- src/google/protobuf/repeated_field.h | 2 +- src/google/protobuf/repeated_ptr_field.h | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/google/protobuf/repeated_field.h b/src/google/protobuf/repeated_field.h index ccae6bb97a..bc70129181 100644 --- a/src/google/protobuf/repeated_field.h +++ b/src/google/protobuf/repeated_field.h @@ -716,7 +716,7 @@ inline void RepeatedField::Add(Iter begin, Iter end) { if (std::is_base_of< std::forward_iterator_tag, typename std::iterator_traits::iterator_category>::value) { - int additional = std::distance(begin, end); + int additional = static_cast(std::distance(begin, end)); if (additional == 0) return; int new_size = current_size_ + additional; diff --git a/src/google/protobuf/repeated_ptr_field.h b/src/google/protobuf/repeated_ptr_field.h index f58481dff3..706a005761 100644 --- a/src/google/protobuf/repeated_ptr_field.h +++ b/src/google/protobuf/repeated_ptr_field.h @@ -1351,7 +1351,7 @@ inline void RepeatedPtrField::Add(Iter begin, Iter end) { if (std::is_base_of< std::forward_iterator_tag, typename std::iterator_traits::iterator_category>::value) { - int reserve = std::distance(begin, end); + int reserve = static_cast(std::distance(begin, end)); Reserve(size() + reserve); } for (; begin != end; ++begin) { @@ -1496,8 +1496,8 @@ RepeatedPtrField::erase(const_iterator position) { template inline typename RepeatedPtrField::iterator RepeatedPtrField::erase(const_iterator first, const_iterator last) { - size_type pos_offset = std::distance(cbegin(), first); - size_type last_offset = std::distance(cbegin(), last); + size_type pos_offset = static_cast(std::distance(cbegin(), first)); + size_type last_offset = static_cast(std::distance(cbegin(), last)); DeleteSubrange(pos_offset, last_offset - pos_offset); return begin() + pos_offset; }