https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108059
Bug ID: 108059 Summary: internal compiler error: in tsubst_copy, at cp/pt.c:16425 Product: gcc Version: 10.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: lh_mouse at 126 dot com Target Milestone: --- This was reported on IRC by Vladimir_Kozelko: https://godbolt.org/z/oMjTc1813 ``` #include <utility> struct unused { template <typename T> constexpr unused(T&&) noexcept {} }; template <int> using ignore_index_t = unused; template <int index, typename... Tp> constexpr inline auto pack_element(Tp&&... arr) noexcept { auto unpack = [&](auto... v){ auto impl = [](ignore_index_t<v>..., auto&& out, auto&&) { return out; }; }; } template <int index, typename... Tp> using pack_element_t = decltype(pack_element<index>(std::declval<Tp>()...)); void f1() { using H = pack_element_t<1, int, int&>; } //idea (and it works): auto test = [](auto v){ constexpr auto vv = v; }; void f2() { test(std::integral_constant<int, 0>()); } ``` which ICEs: ``` <source>: In instantiation of 'constexpr auto pack_element(Tp&& ...) [with int index = 1; Tp = {int, int&}]': <source>:21:52: required by substitution of 'template<int index, class ... Tp> using pack_element_t = decltype (pack_element<index>((declval<Tp>)()...)) [with int index = 1; Tp = {int, int&}]' <source>:23:50: required from here <source>:14:21: internal compiler error: in tsubst_copy, at cp/pt.cc:16949 14 | auto impl = [](ignore_index_t<v>..., auto&& out, auto&&) { | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 15 | return out; | ~~~~~~~~~~~ 16 | }; | ~ 0x1bb069e internal_error(char const*, ...) ???:0 0x6ff396 fancy_abort(char const*, int, char const*) ???:0 0x88d46f tsubst_template_args(tree_node*, tree_node*, int, tree_node*) ???:0 0x87aa08 tsubst(tree_node*, tree_node*, int, tree_node*) ???:0 0x87a50a tsubst(tree_node*, tree_node*, int, tree_node*) ???:0 0x887353 tsubst_pack_expansion(tree_node*, tree_node*, int, tree_node*) ???:0 0x87a817 tsubst(tree_node*, tree_node*, int, tree_node*) ???:0 0x89084a tsubst_lambda_expr(tree_node*, tree_node*, int, tree_node*) ???:0 0x890a58 tsubst_lambda_expr(tree_node*, tree_node*, int, tree_node*) ???:0 0x87d4f7 instantiate_decl(tree_node*, bool, bool) ???:0 0x7a1e03 maybe_instantiate_decl(tree_node*) ???:0 0x72588e build_new_function_call(tree_node*, vec<tree_node*, va_gc, vl_embed>**, int) ???:0 0x8aaf0c finish_call_expr(tree_node*, vec<tree_node*, va_gc, vl_embed>**, bool, bool, int) ???:0 0x87abbd tsubst(tree_node*, tree_node*, int, tree_node*) ???:0 0x87b097 tsubst(tree_node*, tree_node*, int, tree_node*) ???:0 0x891f4a instantiate_template(tree_node*, tree_node*, int) ???:0 0x87a682 tsubst(tree_node*, tree_node*, int, tree_node*) ???:0 0x88495f lookup_template_class(tree_node*, tree_node*, tree_node*, tree_node*, int, int) ???:0 0x8aa461 finish_template_type(tree_node*, tree_node*, int) ???:0 0x861eaa c_parse_file() ???:0 Please submit a full bug report, with preprocessed source (by using -freport-bug). Please include the complete backtrace with any bug report. See <https://gcc.gnu.org/bugs/> for instructions. Compiler returned: 1 ```