[Bug c++/80452] New: [DR 1579] incorrect value category deduced for return value

redi at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Apr 18 12:05:00 GMT 2017


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80452

            Bug ID: 80452
           Summary: [DR 1579] incorrect value category deduced for return
                    value
           Product: gcc
           Version: 6.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
  Target Milestone: ---

Core 1579 says this should compile, but the type is deduced as an lvalue
reference:

template<typename> struct check { };
template<typename T> struct check<T&>;

struct A {
  A() = default;
  A(A&&) = default;
  A(const A&) = delete;
};

template <class T>
struct B {
  template <class U> B(U&&) { check<U> u; }
};

B<A> f()
{
  A a;
  return a;
}


bug.cc: In instantiation of ‘B<T>::B(U&&) [with U = A&; T = A]’:
bug.cc:18:10:   required from here
bug.cc:12:40: error: ‘check<A&> u’ has incomplete type
   template <class U> B(U&&) { check<U> u; }
                                        ^


It seems r212099 was not enough to implement the DR.


More information about the Gcc-bugs mailing list