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)

Reply via email to