https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94326
Bug ID: 94326 Summary: g++: error: pack.ii: ‘-fcompare-debug’ failure (length) Product: gcc Version: 10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: debug Assignee: unassigned at gcc dot gnu.org Reporter: marxin at gcc dot gnu.org CC: jakub at gcc dot gnu.org Target Milestone: --- This one is very old (at least GCC 4.8.0): $ cat pack.ii template <typename = int> class A { const int &m_fn1() { return 0; } public: template <typename _Kt> void m_fn2(_Kt) { m_fn1(); } }; class B { A<> _M_t; public: template <typename _Kt> auto m_fn3(_Kt p1) -> decltype(_M_t.m_fn2(p1)) { _M_t.m_fn2(p1); } }; struct C {}; void operator<(C, int) { B a; a.m_fn3(C{}); } $ g++ pack.ii -c -fcompare-debug -std=c++11 pack.ii: In instantiation of ‘const int& A< <template-parameter-1-1> >::m_fn1() [with <template-parameter-1-1> = int]’: pack.ii:5:45: required from ‘void A< <template-parameter-1-1> >::m_fn2(_Kt) [with _Kt = C; <template-parameter-1-1> = int]’ pack.ii:12:15: required from ‘decltype (((B*)this)->B::_M_t.A<>::m_fn2<_Kt>(p1)) B::m_fn3(_Kt) [with _Kt = C; decltype (((B*)this)->B::_M_t.A<>::m_fn2<_Kt>(p1)) = void]’ pack.ii:18:14: required from here pack.ii:2:31: warning: returning reference to temporary [-Wreturn-local-addr] 2 | const int &m_fn1() { return 0; } | ^ g++: error: pack.ii: ‘-fcompare-debug’ failure (length)