https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71095
Karol Wozniak <karol.wozniak at email dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Known to work| |5.3.1
--- Comment #1 from Karol Wozniak <karol.wozniak at email dot com> ---
minimal reproducible example
void foo(int &) {}
int main() {
int a;
[](auto &&x) { foo(static_cast<decltype(x) &&>(x)); }(a);
return 0;
}
$ g++-6 -std=c++14 prog.cc
prog.cc: In instantiation of ‘main()::<lambda(auto:1&&)> [with auto:1 = int]’:
prog.cc:5:14: required by substitution of ‘template<class auto:1>
main()::<lambda(auto:1&&)>::operator decltype
(((main()::<lambda(auto:1&&)>)0u).operator()(static_cast<auto:1&&>(<anonymous>)))
(*)(auto:1&&)() const [with auto:1 = int]’
prog.cc:5:58: required from here
prog.cc:5:21: error: invalid initialization of non-const reference of type
‘int&’ from an rvalue of type ‘int’
[](auto &&x) { foo(static_cast<decltype(x) &&>(x)); }(a);
~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
prog.cc:1:6: note: initializing argument 1 of ‘void foo(int&)’
void foo(int &) {}
^~~