Implement C++20 constexpr comparison operators for __debug::array (P1023).
* include/debug/array: Add C++20 constexpr to comparison operators. * testsuite/23_containers/array/tuple_interface/get_debug_neg.cc: Adapt dg-error line numbers. * testsuite/23_containers/array/tuple_interface/ tuple_element_debug_neg.cc: Likewise. From-SVN: r276375
This commit is contained in:
parent
b54453598a
commit
2d2ad752c0
|
@ -234,16 +234,19 @@ namespace __debug
|
||||||
|
|
||||||
// Array comparisons.
|
// Array comparisons.
|
||||||
template<typename _Tp, std::size_t _Nm>
|
template<typename _Tp, std::size_t _Nm>
|
||||||
|
_GLIBCXX20_CONSTEXPR
|
||||||
inline bool
|
inline bool
|
||||||
operator==(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
|
operator==(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
|
||||||
{ return std::equal(__one.begin(), __one.end(), __two.begin()); }
|
{ return std::equal(__one.begin(), __one.end(), __two.begin()); }
|
||||||
|
|
||||||
template<typename _Tp, std::size_t _Nm>
|
template<typename _Tp, std::size_t _Nm>
|
||||||
|
_GLIBCXX20_CONSTEXPR
|
||||||
inline bool
|
inline bool
|
||||||
operator!=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
|
operator!=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
|
||||||
{ return !(__one == __two); }
|
{ return !(__one == __two); }
|
||||||
|
|
||||||
template<typename _Tp, std::size_t _Nm>
|
template<typename _Tp, std::size_t _Nm>
|
||||||
|
_GLIBCXX20_CONSTEXPR
|
||||||
inline bool
|
inline bool
|
||||||
operator<(const array<_Tp, _Nm>& __a, const array<_Tp, _Nm>& __b)
|
operator<(const array<_Tp, _Nm>& __a, const array<_Tp, _Nm>& __b)
|
||||||
{
|
{
|
||||||
|
@ -252,16 +255,19 @@ namespace __debug
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename _Tp, std::size_t _Nm>
|
template<typename _Tp, std::size_t _Nm>
|
||||||
|
_GLIBCXX20_CONSTEXPR
|
||||||
inline bool
|
inline bool
|
||||||
operator>(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
|
operator>(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
|
||||||
{ return __two < __one; }
|
{ return __two < __one; }
|
||||||
|
|
||||||
template<typename _Tp, std::size_t _Nm>
|
template<typename _Tp, std::size_t _Nm>
|
||||||
|
_GLIBCXX20_CONSTEXPR
|
||||||
inline bool
|
inline bool
|
||||||
operator<=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
|
operator<=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
|
||||||
{ return !(__one > __two); }
|
{ return !(__one > __two); }
|
||||||
|
|
||||||
template<typename _Tp, std::size_t _Nm>
|
template<typename _Tp, std::size_t _Nm>
|
||||||
|
_GLIBCXX20_CONSTEXPR
|
||||||
inline bool
|
inline bool
|
||||||
operator>=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
|
operator>=(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two)
|
||||||
{ return !(__one < __two); }
|
{ return !(__one < __two); }
|
||||||
|
|
|
@ -27,6 +27,6 @@ int n1 = std::get<1>(a);
|
||||||
int n2 = std::get<1>(std::move(a));
|
int n2 = std::get<1>(std::move(a));
|
||||||
int n3 = std::get<1>(ca);
|
int n3 = std::get<1>(ca);
|
||||||
|
|
||||||
// { dg-error "static assertion failed" "" { target *-*-* } 288 }
|
// { dg-error "static assertion failed" "" { target *-*-* } 294 }
|
||||||
// { dg-error "static assertion failed" "" { target *-*-* } 297 }
|
// { dg-error "static assertion failed" "" { target *-*-* } 303 }
|
||||||
// { dg-error "static assertion failed" "" { target *-*-* } 305 }
|
// { dg-error "static assertion failed" "" { target *-*-* } 311 }
|
||||||
|
|
|
@ -22,4 +22,4 @@
|
||||||
|
|
||||||
typedef std::tuple_element<1, std::array<int, 1>>::type type;
|
typedef std::tuple_element<1, std::array<int, 1>>::type type;
|
||||||
|
|
||||||
// { dg-error "static assertion failed" "" { target *-*-* } 331 }
|
// { dg-error "static assertion failed" "" { target *-*-* } 376 }
|
||||||
|
|
Loading…
Reference in New Issue