https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102749

            Bug ID: 102749
           Summary: ambigous call on different std::variant types with
                    iterators
           Product: gcc
           Version: 11.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: benni.probst at gmx dot de
  Target Milestone: ---

Created attachment 51600
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=51600&action=edit
dataContainer switching between container Types, reading with std::variant
iterator types

the compiler cannot see the difference:

In file included from
/home/benjamin/CLionProjects/UltiHash/aiHeuristics_runtime_tests.h:4,
                 from /home/benjamin/CLionProjects/UltiHash/main.cpp:8:
/home/benjamin/CLionProjects/UltiHash/dataContainer.h: In instantiation of
‘dataContainer<unsigned int>::benchmark(long unsigned int, long unsigned int,
internEnum,
internEnum)::<lambda(auto:176)>::<lambda(auto:177)>::<lambda(auto:179)> [with
auto:179 = std::integral_constant<long unsigned int, 0>]’:
/usr/local/include/boost/mp11/detail/mp_with_index.hpp:374:84:   required by
substitution of ‘template<class N, class F> constexpr decltype
(declval<F>()(declval<boost::mp11::mp_size_t<0> >()))
boost::mp11::mp_with_index(std::size_t, F&&) [with N =
std::integral_constant<long unsigned int, 10>; F = dataContainer<unsigned
int>::benchmark(long unsigned int, long unsigned int, internEnum,
internEnum)::<lambda(auto:176)>::<lambda(auto:177)>::<lambda(auto:179)>]’
/home/benjamin/CLionProjects/UltiHash/dataContainer.h:1103:78:   required from
‘dataContainer<unsigned int>::benchmark(long unsigned int, long unsigned int,
internEnum, internEnum)::<lambda(auto:176)>::<lambda(auto:177)> [with auto:177
= std::integral_constant<long unsigned int, 0>]’
/usr/local/include/boost/mp11/detail/mp_with_index.hpp:374:84:   required by
substitution of ‘template<class N, class F> constexpr decltype
(declval<F>()(declval<boost::mp11::mp_size_t<0> >()))
boost::mp11::mp_with_index(std::size_t, F&&) [with N =
std::integral_constant<long unsigned int, 10>; F = dataContainer<unsigned
int>::benchmark(long unsigned int, long unsigned int, internEnum,
internEnum)::<lambda(auto:176)>::<lambda(auto:177)>]’
/home/benjamin/CLionProjects/UltiHash/dataContainer.h:1055:83:   required from
‘dataContainer<unsigned int>::benchmark(long unsigned int, long unsigned int,
internEnum, internEnum)::<lambda(auto:176)> [with auto:176 =
std::integral_constant<long unsigned int, 0>]’
/usr/local/include/boost/mp11/detail/mp_with_index.hpp:374:84:   required by
substitution of ‘template<class N, class F> constexpr decltype
(declval<F>()(declval<boost::mp11::mp_size_t<0> >()))
boost::mp11::mp_with_index(std::size_t, F&&) [with N =
std::integral_constant<long unsigned int, 10>; F = dataContainer<unsigned
int>::benchmark(long unsigned int, long unsigned int, internEnum,
internEnum)::<lambda(auto:176)>]’
/home/benjamin/CLionProjects/UltiHash/dataContainer.h:1051:79:   required from
‘void dataContainer<T, alloc>::benchmark(long unsigned int, long unsigned int,
internEnum, internEnum) [with T = unsigned int; alloc = {}; internEnum = long
unsigned int]’
/home/benjamin/CLionProjects/UltiHash/dataContainer.h:1050:10:   required from
here
/home/benjamin/CLionProjects/UltiHash/dataContainer.h:1106:21: error: call of
overloaded ‘insert(__gnu_cxx::__normal_iterator<unsigned int*,
std::vector<unsigned int> >&, unsigned int)’ is ambiguous
 1106 |                     insert(itB, T{});
      |                     ^~~~~~
/home/benjamin/CLionProjects/UltiHash/dataContainer.h:604:18: note: candidate:
‘dataContainer<T, alloc>::iteratorType dataContainer<T,
alloc>::insert(dataContainer<T, alloc>::iteratorType&&, Args&& ...) [with Args
= {unsigned int}; T = unsigned int; alloc = {}; dataContainer<T,
alloc>::iteratorType = std::variant<__gnu_cxx::__normal_iterator<unsigned int*,
std::vector<unsigned int, std::allocator<unsigned int> > >,
std::_Deque_iterator<unsigned int, unsigned int&, unsigned int*>,
std::_List_iterator<unsigned int>, boost::container::vec_iterator<unsigned
int*, false>, boost::container::stable_vector_iterator<unsigned int*, false>,
unsigned int*, boost::container::dtl::deque_iterator<unsigned int*, false>,
boost::container::dtl::iterator_from_iiterator<boost::intrusive::list_iterator<boost::intrusive::bhtraits<boost::container::dtl::list_node<unsigned
int, void*>, boost::intrusive::list_node_traits<void*>,
boost::intrusive::normal_link, boost::intrusive::dft_tag, 1>, false>, false>,
std::_Fwd_list_iterator<unsigned int>,
boost::container::dtl::iterator_from_iiterator<boost::intrusive::slist_iterator<boost::intrusive::bhtraits<boost::container::dtl::slist_node<unsigned
int, void*>, boost::intrusive::slist_node_traits<void*>,
boost::intrusive::normal_link, boost::intrusive::dft_tag, 2>, false>, false>
>]’
  604 |     iteratorType insert(iteratorType &&arg1, Args &&...args){
      |                  ^~~~~~
/home/benjamin/CLionProjects/UltiHash/dataContainer.h:649:23: note: candidate:
‘dataContainer<T, alloc>::constIteratorType dataContainer<T,
alloc>::insert(dataContainer<T, alloc>::constIteratorType&&, Args&& ...) [with
Args = {unsigned int}; T = unsigned int; alloc = {}; dataContainer<T,
alloc>::constIteratorType = std::variant<__gnu_cxx::__normal_iterator<const
unsigned int*, std::vector<unsigned int, std::allocator<unsigned int> > >,
std::_Deque_iterator<unsigned int, const unsigned int&, const unsigned int*>,
std::_List_const_iterator<unsigned int>,
boost::container::vec_iterator<unsigned int*, true>,
boost::container::stable_vector_iterator<unsigned int*, true>, const unsigned
int*, boost::container::dtl::deque_iterator<unsigned int*, true>,
boost::container::dtl::iterator_from_iiterator<boost::intrusive::list_iterator<boost::intrusive::bhtraits<boost::container::dtl::list_node<unsigned
int, void*>, boost::intrusive::list_node_traits<void*>,
boost::intrusive::normal_link, boost::intrusive::dft_tag, 1>, false>, true>,
std::_Fwd_list_const_iterator<unsigned int>,
boost::container::dtl::iterator_from_iiterator<boost::intrusive::slist_iterator<boost::intrusive::bhtraits<boost::container::dtl::slist_node<unsigned
int, void*>, boost::intrusive::slist_node_traits<void*>,
boost::intrusive::normal_link, boost::intrusive::dft_tag, 2>, false>, true> >]’
  649 |     constIteratorType insert(constIteratorType &&arg1, Args &&...args){
      |                       ^~~~~~

Reply via email to