This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/54968] New: spurious constexpr error, 20_util/tuple/comparison_operators/35480_neg.cc
- From: "bkoz at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Thu, 18 Oct 2012 08:15:37 +0000
- Subject: [Bug c++/54968] New: spurious constexpr error, 20_util/tuple/comparison_operators/35480_neg.cc
- Auto-submitted: auto-generated
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: unassigned@gcc.gnu.org
ReportedBy: bkoz@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.