https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79504
Bug ID: 79504
Summary: Mix of perfect forwarding and reference qualifier
leads to recursive template instantiation.
Product: gcc
Version: 7.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: Predelnik at gmail dot com
Target Milestone: ---
The following example seems correct to me and is accepted by msvc/clang but gcc
rejects it starting from version 4.8 up to current day versions with "template
instantiation depth exceeds maximum of 900". Removing trailing type helps, so
it's gotta be problem with f in trailing type being the wrong one I guess.
#include <utility>
struct A
{
void f () & {}
template <typename ...Args> auto f (Args &&... args) && -> decltype
(std::move (this->f (std::forward<Args> (args)...)))
{
return std::move (this->f (std::forward<Args> (args)...));
}
};
int main (){
A p;
p.f ();
}