abseil-cpp icon indicating copy to clipboard operation
abseil-cpp copied to clipboard

StrSplit return as std::set/absl::flat_hash_set triggers warning

Open EtoDemerzel0427 opened this issue 3 years ago • 0 comments

I'm currently using Abseil-app from the master branch. My code:

std::set<std::string> controllers = absl::StrSplit(*content, ' ');  // content: absl::StatusOr<std::string>

Would trigger:

In file included from /home/parallels/weiran-dev/rouster/third_party/abseil-cpp/absl/strings/str_split.h:48,
                 from /home/parallels/weiran-dev/rouster/src/main.cpp:11:
/home/parallels/weiran-dev/rouster/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h: In instantiation of ‘absl::strings_internal::SplitIterator<Splitter>& absl::strings_internal::SplitIterator<Splitter>::operator++() [with Splitter = absl::strings_internal::Splitter<absl::ByChar, absl::AllowEmpty, std::basic_string_view<char> >]’:
/home/parallels/weiran-dev/rouster/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h:321:7:   required from ‘Container absl::strings_internal::Splitter<Delimiter, Predicate, StringType>::ConvertToContainer<Container, ValueType, is_map>::operator()(const absl::strings_internal::Splitter<Delimiter, Predicate, StringType>&) const [with Container = std::set<std::__cxx11::basic_string<char> >; ValueType = std::__cxx11::basic_string<char>; bool is_map = false; Delimiter = absl::ByChar; Predicate = absl::AllowEmpty; StringType = std::basic_string_view<char>]’
/home/parallels/weiran-dev/rouster/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h:288:65:   required from ‘absl::strings_internal::Splitter<Delimiter, Predicate, StringType>::operator Container() const [with Container = std::set<std::__cxx11::basic_string<char> >; <template-parameter-2-2> = void; Delimiter = absl::ByChar; Predicate = absl::AllowEmpty; StringType = std::basic_string_view<char>]’
/home/parallels/weiran-dev/rouster/src/main.cpp:54:71:   required from here
/home/parallels/weiran-dev/rouster/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h:135:42: warning: conversion to ‘std::basic_string_view<char>::size_type’ {aka ‘long unsigned int’} from ‘long int’ may change the sign of the result [-Wsign-conversion]
  135 |       curr_ = text.substr(pos_, d.data() - (text.data() + pos_));
      |                                 ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~

And absl::flat_hash_set will trigger additional warnings (besides the above warning):

In file included from /home/parallels/weiran-dev/rouster/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h:40,
                 from /home/parallels/weiran-dev/rouster/third_party/abseil-cpp/absl/container/internal/inlined_vector.h:30,
                 from /home/parallels/weiran-dev/rouster/third_party/abseil-cpp/absl/container/inlined_vector.h:53,
                 from /home/parallels/weiran-dev/rouster/third_party/abseil-cpp/absl/status/status.h:57,
                 from /home/parallels/weiran-dev/rouster/src/linux/sys.h:1,
                 from /home/parallels/weiran-dev/rouster/src/container.hpp:12,
                 from /home/parallels/weiran-dev/rouster/src/main.cpp:6:
/home/parallels/weiran-dev/rouster/third_party/abseil-cpp/absl/utility/utility.h: In instantiation of ‘T absl::exchange(T&, U&&) [with T = long unsigned int; U = int]’:
/home/parallels/weiran-dev/rouster/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h:1275:29:   required from ‘absl::container_internal::raw_hash_set<Policy, Hash, Eq, Alloc>::raw_hash_set(absl::container_internal::raw_hash_set<Policy, Hash, Eq, Alloc>&&) [with Policy = absl::container_internal::FlatHashSetPolicy<std::basic_string_view<char> >; Hash = absl::container_internal::StringHash; Eq = absl::container_internal::StringEq; Alloc = std::allocator<std::basic_string_view<char> >]’
/home/parallels/weiran-dev/rouster/third_party/abseil-cpp/absl/container/flat_hash_set.h:105:7:   required from ‘Container absl::strings_internal::Splitter<Delimiter, Predicate, StringType>::ConvertToContainer<Container, ValueType, is_map>::operator()(const absl::strings_internal::Splitter<Delimiter, Predicate, StringType>&) const [with Container = absl::flat_hash_set<std::basic_string_view<char> >; ValueType = std::basic_string_view<char>; bool is_map = false; Delimiter = absl::ByChar; Predicate = absl::AllowEmpty; StringType = std::basic_string_view<char>]’
/home/parallels/weiran-dev/rouster/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h:288:65:   required from ‘absl::strings_internal::Splitter<Delimiter, Predicate, StringType>::operator Container() const [with Container = absl::flat_hash_set<std::basic_string_view<char> >; <template-parameter-2-2> = void; Delimiter = absl::ByChar; Predicate = absl::AllowEmpty; StringType = std::basic_string_view<char>]’
/home/parallels/weiran-dev/rouster/src/main.cpp:54:87:   required from here
/home/parallels/weiran-dev/rouster/third_party/abseil-cpp/absl/utility/utility.h:316:7: warning: conversion to ‘long unsigned int’ from ‘int’ may change the sign of the result [-Wsign-conversion]
  316 |   obj = absl::forward<U>(new_value);
      |   ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Seems like there exist some implicit conversions. Though these are not errors, can we have a fix for them?

EtoDemerzel0427 avatar Jul 26 '22 23:07 EtoDemerzel0427