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

            Bug ID: 100243
           Summary: [10 Regression] invalid use of incomplete type
                    'std::__detail::__iter_traits<T,
                    std::indirectly_readable_traits<T> >' {aka 'struct
                    std::indirectly_readable_traits<T>'}
           Product: gcc
           Version: 10.3.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: nok.raven at gmail dot com
  Target Milestone: ---

// g++-10 -std=c++2a
#include <boost/unordered/unordered_set.hpp>
#include <iterator>

int main()
{
    boost::unordered_multiset<std::string> a, b;
    b.insert(std::make_move_iterator(a.begin()),
std::make_move_iterator(b.begin()));
}


```
In file included from
/opt/compiler-explorer/gcc-10.3.0/include/c++/10.3.0/bits/stl_iterator_base_types.h:71,
                 from
/opt/compiler-explorer/gcc-10.3.0/include/c++/10.3.0/bits/stl_algobase.h:65,
                 from
/opt/compiler-explorer/gcc-10.3.0/include/c++/10.3.0/array:40,
                 from
/opt/compiler-explorer/gcc-10.3.0/include/c++/10.3.0/tuple:39,
                 from
/opt/compiler-explorer/gcc-10.3.0/include/c++/10.3.0/functional:54,
                 from
/opt/compiler-explorer/libs/boost_1_75_0/boost/container_hash/hash.hpp:20,
                 from
/opt/compiler-explorer/libs/boost_1_75_0/boost/functional/hash.hpp:6,
                 from
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/unordered_set.hpp:18,
                 from <source>:1:
/opt/compiler-explorer/gcc-10.3.0/include/c++/10.3.0/bits/iterator_concepts.h:
In substitution of 'template<class _Tp> using __iter_value_t = typename
std::__detail::__iter_traits_impl<_Tp, std::indirectly_readable_traits<_Iter>
>::type::value_type [with _Tp =
boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> >]':
/opt/compiler-explorer/gcc-10.3.0/include/c++/10.3.0/bits/iterator_concepts.h:259:11:
  required by substitution of 'template<class _Tp> using iter_value_t =
std::__detail::__iter_value_t<typename std::remove_cv<typename
std::remove_reference<_Tp>::type>::type> [with _Tp =
boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> >]'
/opt/compiler-explorer/gcc-10.3.0/include/c++/10.3.0/bits/stl_iterator.h:1301:13:
  required from 'class
std::move_iterator<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > >'
<source>:7:47:   required from here
/opt/compiler-explorer/gcc-10.3.0/include/c++/10.3.0/bits/iterator_concepts.h:254:13:
error: ambiguous template instantiation for 'struct
std::indirectly_readable_traits<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > >'
  254 |       using __iter_value_t = typename
      |             ^~~~~~~~~~~~~~
/opt/compiler-explorer/gcc-10.3.0/include/c++/10.3.0/bits/iterator_concepts.h:242:12:
note: candidates are: 'template<class _Tp>  requires requires{typename
_Tp::value_type;} struct std::indirectly_readable_traits<_Iter> [with _Tp =
boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> >]'
  242 |     struct indirectly_readable_traits<_Tp>
      |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/opt/compiler-explorer/gcc-10.3.0/include/c++/10.3.0/bits/iterator_concepts.h:247:12:
note:                 'template<class _Tp>  requires requires{typename
_Tp::element_type;} struct std::indirectly_readable_traits<_Iter> [with _Tp =
boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> >]'
  247 |     struct indirectly_readable_traits<_Tp>
      |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/opt/compiler-explorer/gcc-10.3.0/include/c++/10.3.0/bits/iterator_concepts.h:254:13:
error: invalid use of incomplete type
'std::__detail::__iter_traits<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> >,
std::indirectly_readable_traits<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > > >' {aka 'struct
std::indirectly_readable_traits<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > >'}
  254 |       using __iter_value_t = typename
      |             ^~~~~~~~~~~~~~
/opt/compiler-explorer/gcc-10.3.0/include/c++/10.3.0/bits/iterator_concepts.h:225:29:
note: declaration of
'std::__detail::__iter_traits<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> >,
std::indirectly_readable_traits<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > > >' {aka 'struct
std::indirectly_readable_traits<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > >'}
  225 |   template<typename> struct indirectly_readable_traits { };
      |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/detail/set.hpp:6,
                 from
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/unordered_set.hpp:20,
                 from <source>:1:
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/detail/implementation.hpp:
In instantiation of 'struct
boost::unordered::detail::is_forward<std::move_iterator<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > > >':
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/detail/implementation.hpp:273:14:
  required from 'struct
boost::unordered::detail::disable_if_forward<std::move_iterator<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > >, void*>'
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/detail/implementation.hpp:4364:14:
  required by substitution of 'template<class I> void
boost::unordered::detail::table<boost::unordered::detail::set<std::allocator<std::__cxx11::basic_string<char>
>, std::__cxx11::basic_string<char>,
boost::hash<std::__cxx11::basic_string<char> >,
std::equal_to<std::__cxx11::basic_string<char> > > >::insert_range_equiv<I>(I,
I, typename boost::unordered::detail::disable_if_forward<I, void*>::type) [with
I =
std::move_iterator<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > >]'
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/unordered_set.hpp:1714:32:
  required from 'void boost::unordered::unordered_multiset<T, H, P,
A>::insert(InputIt, InputIt) [with InputIt =
std::move_iterator<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > >; T = std::__cxx11::basic_string<char>; H =
boost::hash<std::__cxx11::basic_string<char> >; P =
std::equal_to<std::__cxx11::basic_string<char> >; A =
std::allocator<std::__cxx11::basic_string<char> >]'
<source>:7:84:   required from here
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/detail/implementation.hpp:260:14:
error: no type named 'iterator_category' in 'struct
std::iterator_traits<std::move_iterator<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > > >'
  260 |       struct is_forward : boost::is_base_of<std::forward_iterator_tag,
      |              ^~~~~~~~~~
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/detail/implementation.hpp:
In instantiation of 'struct
boost::unordered::detail::disable_if_forward<std::move_iterator<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > >, void*>':
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/detail/implementation.hpp:4364:14:
  required by substitution of 'template<class I> void
boost::unordered::detail::table<boost::unordered::detail::set<std::allocator<std::__cxx11::basic_string<char>
>, std::__cxx11::basic_string<char>,
boost::hash<std::__cxx11::basic_string<char> >,
std::equal_to<std::__cxx11::basic_string<char> > > >::insert_range_equiv<I>(I,
I, typename boost::unordered::detail::disable_if_forward<I, void*>::type) [with
I =
std::move_iterator<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > >]'
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/unordered_set.hpp:1714:32:
  required from 'void boost::unordered::unordered_multiset<T, H, P,
A>::insert(InputIt, InputIt) [with InputIt =
std::move_iterator<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > >; T = std::__cxx11::basic_string<char>; H =
boost::hash<std::__cxx11::basic_string<char> >; P =
std::equal_to<std::__cxx11::basic_string<char> >; A =
std::allocator<std::__cxx11::basic_string<char> >]'
<source>:7:84:   required from here
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/detail/implementation.hpp:273:14:
error: 'value' is not a member of
'boost::unordered::detail::is_forward<std::move_iterator<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > > >'
  273 |       struct disable_if_forward
      |              ^~~~~~~~~~~~~~~~~~
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/detail/implementation.hpp:
In instantiation of 'struct
boost::unordered::detail::enable_if_forward<std::move_iterator<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > >, void*>':
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/detail/implementation.hpp:4340:14:
  required by substitution of 'template<class I> void
boost::unordered::detail::table<boost::unordered::detail::set<std::allocator<std::__cxx11::basic_string<char>
>, std::__cxx11::basic_string<char>,
boost::hash<std::__cxx11::basic_string<char> >,
std::equal_to<std::__cxx11::basic_string<char> > > >::insert_range_equiv<I>(I,
I, typename boost::unordered::detail::enable_if_forward<I, void*>::type) [with
I =
std::move_iterator<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > >]'
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/unordered_set.hpp:1714:32:
  required from 'void boost::unordered::unordered_multiset<T, H, P,
A>::insert(InputIt, InputIt) [with InputIt =
std::move_iterator<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > >; T = std::__cxx11::basic_string<char>; H =
boost::hash<std::__cxx11::basic_string<char> >; P =
std::equal_to<std::__cxx11::basic_string<char> >; A =
std::allocator<std::__cxx11::basic_string<char> >]'
<source>:7:84:   required from here
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/detail/implementation.hpp:266:14:
error: 'value' is not a member of
'boost::unordered::detail::is_forward<std::move_iterator<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > > >'
  266 |       struct enable_if_forward
      |              ^~~~~~~~~~~~~~~~~
In file included from <source>:1:
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/unordered_set.hpp: In
instantiation of 'void boost::unordered::unordered_multiset<T, H, P,
A>::insert(InputIt, InputIt) [with InputIt =
std::move_iterator<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > >; T = std::__cxx11::basic_string<char>; H =
boost::hash<std::__cxx11::basic_string<char> >; P =
std::equal_to<std::__cxx11::basic_string<char> >; A =
std::allocator<std::__cxx11::basic_string<char> >]':
<source>:7:84:   required from here
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/unordered_set.hpp:1714:32:
error: no matching function for call to
'boost::unordered::detail::table<boost::unordered::detail::set<std::allocator<std::__cxx11::basic_string<char>
>, std::__cxx11::basic_string<char>,
boost::hash<std::__cxx11::basic_string<char> >,
std::equal_to<std::__cxx11::basic_string<char> > >
>::insert_range_equiv(std::move_iterator<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > >&,
std::move_iterator<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > >&)'
 1714 |       table_.insert_range_equiv(first, last);
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~
In file included from
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/detail/set.hpp:6,
                 from
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/unordered_set.hpp:20,
                 from <source>:1:
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/detail/implementation.hpp:4340:14:
note: candidate: 'template<class I> void
boost::unordered::detail::table<Types>::insert_range_equiv(I, I, typename
boost::unordered::detail::enable_if_forward<I, void*>::type) [with I = I; Types
= boost::unordered::detail::set<std::allocator<std::__cxx11::basic_string<char>
>, std::__cxx11::basic_string<char>,
boost::hash<std::__cxx11::basic_string<char> >,
std::equal_to<std::__cxx11::basic_string<char> > >]'
 4340 |         void insert_range_equiv(I i, I j,
      |              ^~~~~~~~~~~~~~~~~~
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/detail/implementation.hpp:4340:14:
note:   substitution of deduced template arguments resulted in errors seen
above
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/detail/implementation.hpp:4364:14:
note: candidate: 'template<class I> void
boost::unordered::detail::table<Types>::insert_range_equiv(I, I, typename
boost::unordered::detail::disable_if_forward<I, void*>::type) [with I = I;
Types =
boost::unordered::detail::set<std::allocator<std::__cxx11::basic_string<char>
>, std::__cxx11::basic_string<char>,
boost::hash<std::__cxx11::basic_string<char> >,
std::equal_to<std::__cxx11::basic_string<char> > >]'
 4364 |         void insert_range_equiv(I i, I j,
      |              ^~~~~~~~~~~~~~~~~~
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/detail/implementation.hpp:4364:14:
note:   substitution of deduced template arguments resulted in errors seen
above
ASM generation compiler returned: 1
In file included from
/opt/compiler-explorer/gcc-10.3.0/include/c++/10.3.0/bits/stl_iterator_base_types.h:71,
                 from
/opt/compiler-explorer/gcc-10.3.0/include/c++/10.3.0/bits/stl_algobase.h:65,
                 from
/opt/compiler-explorer/gcc-10.3.0/include/c++/10.3.0/array:40,
                 from
/opt/compiler-explorer/gcc-10.3.0/include/c++/10.3.0/tuple:39,
                 from
/opt/compiler-explorer/gcc-10.3.0/include/c++/10.3.0/functional:54,
                 from
/opt/compiler-explorer/libs/boost_1_75_0/boost/container_hash/hash.hpp:20,
                 from
/opt/compiler-explorer/libs/boost_1_75_0/boost/functional/hash.hpp:6,
                 from
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/unordered_set.hpp:18,
                 from <source>:1:
/opt/compiler-explorer/gcc-10.3.0/include/c++/10.3.0/bits/iterator_concepts.h:
In substitution of 'template<class _Tp> using __iter_value_t = typename
std::__detail::__iter_traits_impl<_Tp, std::indirectly_readable_traits<_Iter>
>::type::value_type [with _Tp =
boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> >]':
/opt/compiler-explorer/gcc-10.3.0/include/c++/10.3.0/bits/iterator_concepts.h:259:11:
  required by substitution of 'template<class _Tp> using iter_value_t =
std::__detail::__iter_value_t<typename std::remove_cv<typename
std::remove_reference<_Tp>::type>::type> [with _Tp =
boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> >]'
/opt/compiler-explorer/gcc-10.3.0/include/c++/10.3.0/bits/stl_iterator.h:1301:13:
  required from 'class
std::move_iterator<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > >'
<source>:7:47:   required from here
/opt/compiler-explorer/gcc-10.3.0/include/c++/10.3.0/bits/iterator_concepts.h:254:13:
error: ambiguous template instantiation for 'struct
std::indirectly_readable_traits<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > >'
  254 |       using __iter_value_t = typename
      |             ^~~~~~~~~~~~~~
/opt/compiler-explorer/gcc-10.3.0/include/c++/10.3.0/bits/iterator_concepts.h:242:12:
note: candidates are: 'template<class _Tp>  requires requires{typename
_Tp::value_type;} struct std::indirectly_readable_traits<_Iter> [with _Tp =
boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> >]'
  242 |     struct indirectly_readable_traits<_Tp>
      |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/opt/compiler-explorer/gcc-10.3.0/include/c++/10.3.0/bits/iterator_concepts.h:247:12:
note:                 'template<class _Tp>  requires requires{typename
_Tp::element_type;} struct std::indirectly_readable_traits<_Iter> [with _Tp =
boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> >]'
  247 |     struct indirectly_readable_traits<_Tp>
      |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/opt/compiler-explorer/gcc-10.3.0/include/c++/10.3.0/bits/iterator_concepts.h:254:13:
error: invalid use of incomplete type
'std::__detail::__iter_traits<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> >,
std::indirectly_readable_traits<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > > >' {aka 'struct
std::indirectly_readable_traits<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > >'}
  254 |       using __iter_value_t = typename
      |             ^~~~~~~~~~~~~~
/opt/compiler-explorer/gcc-10.3.0/include/c++/10.3.0/bits/iterator_concepts.h:225:29:
note: declaration of
'std::__detail::__iter_traits<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> >,
std::indirectly_readable_traits<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > > >' {aka 'struct
std::indirectly_readable_traits<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > >'}
  225 |   template<typename> struct indirectly_readable_traits { };
      |                             ^~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/detail/set.hpp:6,
                 from
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/unordered_set.hpp:20,
                 from <source>:1:
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/detail/implementation.hpp:
In instantiation of 'struct
boost::unordered::detail::is_forward<std::move_iterator<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > > >':
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/detail/implementation.hpp:273:14:
  required from 'struct
boost::unordered::detail::disable_if_forward<std::move_iterator<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > >, void*>'
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/detail/implementation.hpp:4364:14:
  required by substitution of 'template<class I> void
boost::unordered::detail::table<boost::unordered::detail::set<std::allocator<std::__cxx11::basic_string<char>
>, std::__cxx11::basic_string<char>,
boost::hash<std::__cxx11::basic_string<char> >,
std::equal_to<std::__cxx11::basic_string<char> > > >::insert_range_equiv<I>(I,
I, typename boost::unordered::detail::disable_if_forward<I, void*>::type) [with
I =
std::move_iterator<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > >]'
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/unordered_set.hpp:1714:32:
  required from 'void boost::unordered::unordered_multiset<T, H, P,
A>::insert(InputIt, InputIt) [with InputIt =
std::move_iterator<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > >; T = std::__cxx11::basic_string<char>; H =
boost::hash<std::__cxx11::basic_string<char> >; P =
std::equal_to<std::__cxx11::basic_string<char> >; A =
std::allocator<std::__cxx11::basic_string<char> >]'
<source>:7:84:   required from here
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/detail/implementation.hpp:260:14:
error: no type named 'iterator_category' in 'struct
std::iterator_traits<std::move_iterator<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > > >'
  260 |       struct is_forward : boost::is_base_of<std::forward_iterator_tag,
      |              ^~~~~~~~~~
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/detail/implementation.hpp:
In instantiation of 'struct
boost::unordered::detail::disable_if_forward<std::move_iterator<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > >, void*>':
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/detail/implementation.hpp:4364:14:
  required by substitution of 'template<class I> void
boost::unordered::detail::table<boost::unordered::detail::set<std::allocator<std::__cxx11::basic_string<char>
>, std::__cxx11::basic_string<char>,
boost::hash<std::__cxx11::basic_string<char> >,
std::equal_to<std::__cxx11::basic_string<char> > > >::insert_range_equiv<I>(I,
I, typename boost::unordered::detail::disable_if_forward<I, void*>::type) [with
I =
std::move_iterator<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > >]'
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/unordered_set.hpp:1714:32:
  required from 'void boost::unordered::unordered_multiset<T, H, P,
A>::insert(InputIt, InputIt) [with InputIt =
std::move_iterator<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > >; T = std::__cxx11::basic_string<char>; H =
boost::hash<std::__cxx11::basic_string<char> >; P =
std::equal_to<std::__cxx11::basic_string<char> >; A =
std::allocator<std::__cxx11::basic_string<char> >]'
<source>:7:84:   required from here
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/detail/implementation.hpp:273:14:
error: 'value' is not a member of
'boost::unordered::detail::is_forward<std::move_iterator<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > > >'
  273 |       struct disable_if_forward
      |              ^~~~~~~~~~~~~~~~~~
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/detail/implementation.hpp:
In instantiation of 'struct
boost::unordered::detail::enable_if_forward<std::move_iterator<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > >, void*>':
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/detail/implementation.hpp:4340:14:
  required by substitution of 'template<class I> void
boost::unordered::detail::table<boost::unordered::detail::set<std::allocator<std::__cxx11::basic_string<char>
>, std::__cxx11::basic_string<char>,
boost::hash<std::__cxx11::basic_string<char> >,
std::equal_to<std::__cxx11::basic_string<char> > > >::insert_range_equiv<I>(I,
I, typename boost::unordered::detail::enable_if_forward<I, void*>::type) [with
I =
std::move_iterator<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > >]'
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/unordered_set.hpp:1714:32:
  required from 'void boost::unordered::unordered_multiset<T, H, P,
A>::insert(InputIt, InputIt) [with InputIt =
std::move_iterator<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > >; T = std::__cxx11::basic_string<char>; H =
boost::hash<std::__cxx11::basic_string<char> >; P =
std::equal_to<std::__cxx11::basic_string<char> >; A =
std::allocator<std::__cxx11::basic_string<char> >]'
<source>:7:84:   required from here
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/detail/implementation.hpp:266:14:
error: 'value' is not a member of
'boost::unordered::detail::is_forward<std::move_iterator<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > > >'
  266 |       struct enable_if_forward
      |              ^~~~~~~~~~~~~~~~~
In file included from <source>:1:
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/unordered_set.hpp: In
instantiation of 'void boost::unordered::unordered_multiset<T, H, P,
A>::insert(InputIt, InputIt) [with InputIt =
std::move_iterator<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > >; T = std::__cxx11::basic_string<char>; H =
boost::hash<std::__cxx11::basic_string<char> >; P =
std::equal_to<std::__cxx11::basic_string<char> >; A =
std::allocator<std::__cxx11::basic_string<char> >]':
<source>:7:84:   required from here
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/unordered_set.hpp:1714:32:
error: no matching function for call to
'boost::unordered::detail::table<boost::unordered::detail::set<std::allocator<std::__cxx11::basic_string<char>
>, std::__cxx11::basic_string<char>,
boost::hash<std::__cxx11::basic_string<char> >,
std::equal_to<std::__cxx11::basic_string<char> > >
>::insert_range_equiv(std::move_iterator<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > >&,
std::move_iterator<boost::unordered::iterator_detail::c_iterator<boost::unordered::detail::ptr_node<std::__cxx11::basic_string<char>
> > >&)'
 1714 |       table_.insert_range_equiv(first, last);
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~
In file included from
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/detail/set.hpp:6,
                 from
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/unordered_set.hpp:20,
                 from <source>:1:
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/detail/implementation.hpp:4340:14:
note: candidate: 'template<class I> void
boost::unordered::detail::table<Types>::insert_range_equiv(I, I, typename
boost::unordered::detail::enable_if_forward<I, void*>::type) [with I = I; Types
= boost::unordered::detail::set<std::allocator<std::__cxx11::basic_string<char>
>, std::__cxx11::basic_string<char>,
boost::hash<std::__cxx11::basic_string<char> >,
std::equal_to<std::__cxx11::basic_string<char> > >]'
 4340 |         void insert_range_equiv(I i, I j,
      |              ^~~~~~~~~~~~~~~~~~
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/detail/implementation.hpp:4340:14:
note:   substitution of deduced template arguments resulted in errors seen
above
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/detail/implementation.hpp:4364:14:
note: candidate: 'template<class I> void
boost::unordered::detail::table<Types>::insert_range_equiv(I, I, typename
boost::unordered::detail::disable_if_forward<I, void*>::type) [with I = I;
Types =
boost::unordered::detail::set<std::allocator<std::__cxx11::basic_string<char>
>, std::__cxx11::basic_string<char>,
boost::hash<std::__cxx11::basic_string<char> >,
std::equal_to<std::__cxx11::basic_string<char> > >]'
 4364 |         void insert_range_equiv(I i, I j,
      |              ^~~~~~~~~~~~~~~~~~
/opt/compiler-explorer/libs/boost_1_75_0/boost/unordered/detail/implementation.hpp:4364:14:
note:   substitution of deduced template arguments resulted in errors seen
above
Execution build compiler returned: 1
```

It works on 9 and 11 though. Could a fix be backported to 10?

https://godbolt.org/z/Mzd3TaM4Y

Reply via email to