https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107579
Bug ID: 107579
Summary: ICE on fold-expression on .* member access operator
Product: gcc
Version: 12.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: jeanmichael.celerier at gmail dot com
Target Milestone: ---
The function that is causing the ICE:
```
constexpr int index_in_struct(const auto& s, auto... member)
{
int index = -1;
int k = 0;
avnd::for_each_field_ref(s, [&](auto& m) {
if constexpr(requires { bool(&m == &(s.*....*member)); })
{
if(&m == &(s.*....*member))
{
index = k;
}
}
++k;
});
assert(index >= 0);
return index;
}
```
The error:
/home/jcelerier/score/3rdparty/avendish/include/avnd/common/for_nth.hpp:114:26:
internal compiler error: trying to capture 'member#0' in instantiation of
generic lambda
114 | if(&m == &(s.*....*member))
| ^~~~~~
0x19eab38 internal_error(char const*, ...)
???:0
0x71c547 add_capture(tree_node*, tree_node*, tree_node*, bool, bool)
???:0
0x71c5b3 add_default_capture(tree_node*, tree_node*, tree_node*)
???:0
0x7e232a tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
???:0
0x7e0baa tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
???:0
0x7e8d8c tsubst_pack_expansion(tree_node*, tree_node*, int, tree_node*)
???:0
0x7dff89 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
???:0
0x7e0d41 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
???:0
0x7dfdeb tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
???:0
0x7db043 instantiate_decl(tree_node*, bool, bool)
???:0
0x6edb1b mark_used(tree_node*, int)
???:0
0x68b85f build_op_call(tree_node*, vec<tree_node*, va_gc, vl_embed>**, int)
???:0
0x810f2d finish_call_expr(tree_node*, vec<tree_node*, va_gc, vl_embed>**, bool,
bool, int)
???:0
0x7e1f0c tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
???:0
0x7e8d8c tsubst_pack_expansion(tree_node*, tree_node*, int, tree_node*)
???:0
0x7dff89 tsubst_copy_and_build(tree_node*, tree_node*, int, tree_node*, bool,
bool)
???:0
0x7db043 instantiate_decl(tree_node*, bool, bool)
???:0
0x6edb1b mark_used(tree_node*, int)
???:0
0x68b85f build_op_call(tree_node*, vec<tree_node*, va_gc, vl_embed>**, int)
???:0
0x810f2d finish_call_expr(tree_node*, vec<tree_node*, va_gc, vl_embed>**, bool,
bool, int)
???:0