https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102778
Bug ID: 102778 Summary: cannot parameter pack std::variant 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 51610 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=51610&action=edit Source code for the container variant module When trying to unpack a variadic reference on an std::varaint containing container iterators I get an interal compiler error ====================[ Build | UltiHash | Debug ]================================ /usr/local/bin/cmake --build /home/benjamin/CLionProjects/UltiHash/cmake-build-debug --target UltiHash -j 8 Scanning dependencies of target UltiHash [ 11%] Building CXX object CMakeFiles/UltiHash.dir/dataContainer.cpp.o [ 22%] Building CXX object CMakeFiles/UltiHash.dir/main.cpp.o 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>::erase<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> >&>(dataContainer<unsigned int>::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> >&)::<lambda(auto:164)>::<lambda(auto:165)> [with auto:165 = 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>::erase<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> >&>(dataContainer<unsigned int>::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> >&)::<lambda(auto:164)>::<lambda(auto:165)>]’ /home/benjamin/CLionProjects/UltiHash/dataContainer.h:804:77: required from ‘dataContainer<unsigned int>::erase<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> >&>(dataContainer<unsigned int>::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> >&)::<lambda(auto:164)> [with auto:164 = 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>::erase<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> >&>(dataContainer<unsigned int>::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> >&)::<lambda(auto:164)>]’ /home/benjamin/CLionProjects/UltiHash/dataContainer.h:803:69: required from ‘dataContainer<T, alloc>::iteratorType dataContainer<T, alloc>::erase(dataContainer<T, alloc>::iteratorType, Args&& ...) [with Args = {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> >&}; 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> >]’ /home/benjamin/CLionProjects/UltiHash/dataContainer.h:1616:22: required from ‘dataContainer<unsigned int>::benchmark(long unsigned int, long unsigned int, internEnum, internEnum)::<lambda(auto:178)>::<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:178)>::<lambda(auto:179)>]’ /home/benjamin/CLionProjects/UltiHash/dataContainer.h:1208:83: required from ‘dataContainer<unsigned int>::benchmark(long unsigned int, long unsigned int, internEnum, internEnum)::<lambda(auto:178)> [with auto:178 = 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:178)>]’ /home/benjamin/CLionProjects/UltiHash/dataContainer.h:1204: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:1203:10: required from here /home/benjamin/CLionProjects/UltiHash/dataContainer.h:880:85: internal compiler error: trying to capture ‘args#0’ in instantiation of generic lambda 880 | auto itUnpack_end = std::get<I2>(std::forward<iteratorType>(args)...); | ^~~~ 0x7c3781 add_capture(tree_node*, tree_node*, tree_node*, bool, bool) ../../gcc/cp/lambda.c:619 0x7c37f3 add_default_capture(tree_node*, tree_node*, tree_node*) ../../gcc/cp/lambda.c:679 0x87bd81 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool, bool) ../../gcc/cp/pt.c:20916 0x87a742 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool, bool) ../../gcc/cp/pt.c:19650 0x87a742 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool, bool) ../../gcc/cp/pt.c:21031 0x879f87 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool, bool) ../../gcc/cp/pt.c:19650 0x879f87 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool, bool) ../../gcc/cp/pt.c:20315 0x88bd14 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool, bool) ../../gcc/cp/pt.c:19650 0x88bd14 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool) ../../gcc/cp/pt.c:19200 0x88ac3a tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool) ../../gcc/cp/pt.c:18176 0x88ac3a gen_elem_of_pack_expansion_instantiation ../../gcc/cp/pt.c:12587 0x88ac3a tsubst_pack_expansion(tree_node*, tree_node*, int, tree_node*) ../../gcc/cp/pt.c:13250 0x87b517 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool, bool) ../../gcc/cp/pt.c:20320 0x88bd14 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool, bool) ../../gcc/cp/pt.c:19650 0x88bd14 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool) ../../gcc/cp/pt.c:19200 0x8921cc tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool) ../../gcc/cp/pt.c:16506 0x8921cc tsubst_init ../../gcc/cp/pt.c:16510 0x88eef9 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool) ../../gcc/cp/pt.c:18359 0x88d114 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool) ../../gcc/cp/pt.c:18176 0x88d114 tsubst_expr(tree_node*, tree_node*, int, tree_node*, bool) ../../gcc/cp/pt.c:18190 Please submit a full bug report, with preprocessed source if appropriate. Please include the complete backtrace with any bug report. See <https://gcc.gnu.org/bugs/> for instructions. make[3]: *** [CMakeFiles/UltiHash.dir/build.make:72: CMakeFiles/UltiHash.dir/main.cpp.o] Error 1 make[2]: *** [CMakeFiles/Makefile2:83: CMakeFiles/UltiHash.dir/all] Error 2 make[1]: *** [CMakeFiles/Makefile2:90: CMakeFiles/UltiHash.dir/rule] Error 2 make: *** [Makefile:124: UltiHash] Error 2