[Bug c++/90538] New: Redeclaration error when expanding parameter pack multiple times in a lambda
wtt6 at cornell dot edu
gcc-bugzilla@gcc.gnu.org
Mon May 20 02:29:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90538
Bug ID: 90538
Summary: Redeclaration error when expanding parameter pack
multiple times in a lambda
Product: gcc
Version: 9.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: wtt6 at cornell dot edu
Target Milestone: ---
With gcc-9.1.0, compiling this code
---------------------------------------
template <class... T>
void a(const T&...) {}
template <class... T>
void b(const T&... t) {
[&]() {
a(t...);
a(t...);
};
}
void c() {
b(1);
}
---------------------------------------
gives errors
---------------------------------------
test.cpp: In instantiation of ‘void b(const T& ...) [with T = {int}]’:
test.cpp:13:6: required from here
test.cpp:8:7: error: redeclaration of ‘const int& t#0’
8 | a(t...);
| ^
test.cpp:7:7: note: ‘const int& t#0’ previously declared here
7 | a(t...);
| ^
test.cpp:6:3: error: member ‘b(const T& ...) [with T = {int}]::<lambda()>::<t#0
capture>’ is uninitialized reference
6 | [&]() {
| ^~~~~~~
7 | a(t...);
| ~~~~~~~~
8 | a(t...);
| ~~~~~~~~
9 | };
| ~
test.cpp:6:3: error: designator order for field ‘b(const T& ...) [with T =
{int}]::<lambda()>::<t#0 capture>’ does not match declaration order in ‘b(const
T& ...) [with T = {int}]::<lambda()>’
---------------------------------------
This was accepted by gcc 8.3.
More information about the Gcc-bugs
mailing list