https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90212
Bug ID: 90212
Summary: [8/9 Regression] by-ref capture of constexpr class
object rejected
Product: gcc
Version: 8.3.1
Status: UNCONFIRMED
Keywords: rejects-valid
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: redi at gcc dot gnu.org
CC: nathan at gcc dot gnu.org
Target Milestone: ---
template<typename T> struct tuple {
constexpr tuple(T&& t) : t(t) { }
int t;
};
void foo() {
constexpr tuple<int> v1{1};
constexpr auto v2 = v1;
[&]{ constexpr auto v2 = v1; };
}
Since r256842 GCC 8 and trunk reject this:
a.cc: In lambda function:
a.cc:9:30: error: lambda capture of ‘v1’ is not a constant expression
[&]{ constexpr auto v2 = v1; };
^~
Clang and icc accept it, and I think it's valid.