http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54968



             Bug #: 54968

           Summary: spurious constexpr error,

                    20_util/tuple/comparison_operators/35480_neg.cc

    Classification: Unclassified

           Product: gcc

           Version: 4.8.0

            Status: UNCONFIRMED

          Severity: normal

          Priority: P3

         Component: c++

        AssignedTo: unassig...@gcc.gnu.org

        ReportedBy: b...@gcc.gnu.org





Created attachment 28477

  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=28477

pre-processed test



While finishing up the latest constexpr hacking, I noticed that tuple's

relational operators now give a bogus excess error:



FAIL: 20_util/tuple/comparison_operators/35480_neg.cc (test for excess errors)

Excess errors:

/mnt/share/bld/gcc.git-trunk/x86_64-unknown-linux-gnu/libstdc++-v3/include/tuple:824:5:

error: body of constexpr function 'constexpr bool std::operator<(const

std::tuple<_Elements ...>&, const std::tuple<_Elements ...>&) [with _TElements

= {int}; _UElements = {int, int}]' not a return-statement

/mnt/share/bld/gcc.git-trunk/x86_64-unknown-linux-gnu/libstdc++-v3/include/tuple:813:5:

error: body of constexpr function 'constexpr bool std::operator==(const

std::tuple<_Elements ...>&, const std::tuple<_Elements ...>&) [with _TElements

= {int}; _UElements = {int, int}]' not a return-statement





but this seems unlikely, given:



  template<typename... _TElements, typename... _UElements>

    constexpr bool

    operator==(const tuple<_TElements...>& __t,

           const tuple<_UElements...>& __u)

    {

      typedef tuple<_TElements...> _Tp;

      typedef tuple<_UElements...> _Up;

      return (__tuple_compare<tuple_size<_Tp>::value - tuple_size<_Up>::value,

          0, tuple_size<_Tp>::value, _Tp, _Up>::__eq(__t, __u));

    }



and more importantly, the passing of the positive test here:

libstdc++-v3/testsuite/20_util/tuple/comparison_operators/constexpr.cc



Reasonable people may disagree, and hey, it's late.

Reply via email to