[Bug c++/67655] New: [concepts] expression constraints and variadic expansions
ryan.burn at gmail dot com
gcc-bugzilla@gcc.gnu.org
Sun Sep 20 18:00:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67655
Bug ID: 67655
Summary: [concepts] expression constraints and variadic
expansions
Product: gcc
Version: 6.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: ryan.burn at gmail dot com
Target Milestone: ---
I expect the following should be valid code:
####### BEGIN CODE ########
template<class... Xs>
void consume(Xs&&...) {}
template<class... Xs>
struct A {
template<class... Ys>
requires requires(Ys... ys) {
consume(Xs{ys}...);
}
A(Ys&&... ys) {
}
A(int) {}
};
int main() {
A<int, double> a(55);
return 0;
}
####### END CODE ########
with the first first of the constructor being disabled and the second matching.
But this gives the compilation error:
t2.cpp: In instantiation of ‘struct A<int, double>’:
t2.cpp:16:19: required from here
t2.cpp:8:14: error: mismatched argument pack lengths while expanding ‘Xs{ys}’
consume(Xs{ys}...);
Looking through N4377, I'm not entirely sure how this should be treated, but
would think it should just mean that the expression constraint
consume(Xs{ys}...) shouldn't be satisfied instead of triggering a hard error.
More information about the Gcc-bugs
mailing list