libstdc++: Fix tests that use invalid types in ordered containers

Types used in ordered containers need to be comparable, or the container
needs to use a custom comparison function. These tests fail when
_GLIBCXX_CONCEPT_CHECKS is defined, because the element types aren't
comparable.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>

libstdc++-v3/ChangeLog:

	* testsuite/20_util/is_nothrow_swappable/value.h: Use custom
	comparison function for priority_queue of type with no
	relational operators.
	* testsuite/20_util/is_swappable/value.h: Likewise.
	* testsuite/24_iterators/output/concept.cc: Add operator< to
	type used in set.
This commit is contained in:
Jonathan Wakely 2021-09-24 13:21:34 +01:00
parent 45a8cd2569
commit 4000d722e6
3 changed files with 14 additions and 3 deletions

View File

@ -285,7 +285,9 @@ void test01()
static_assert(test_property<is_nothrow_swappable,
std::queue<ThrowCopyConsClass>>(true), "");
static_assert(test_property<is_nothrow_swappable,
std::priority_queue<ThrowCopyConsClass>>(true), "");
std::priority_queue<ThrowCopyConsClass,
std::vector<ThrowCopyConsClass>,
comps::CompareNoThrowCopyable>>(true), "");
static_assert(test_property<is_nothrow_swappable,
std::stack<ThrowCopyConsClass>>(true), "");
static_assert(test_property<is_nothrow_swappable,

View File

@ -55,6 +55,13 @@ namespace funny {
{
friend void swap(F3&, F3) {}
};
struct DummyCmp
{
template<class T>
bool operator()(const T&, const T&) const
{ return false; }
};
}
void test01()
{
@ -152,7 +159,9 @@ void test01()
static_assert(test_property<is_swappable,
std::priority_queue<int>[1][2][3]>(true), "");
static_assert(test_property<is_swappable,
std::priority_queue<construct::Nontrivial>>(true), "");
std::priority_queue<construct::Nontrivial,
std::vector<construct::Nontrivial>,
funny::DummyCmp>>(true), "");
static_assert(test_property<is_swappable,
std::stack<int>>(true), "");
static_assert(test_property<is_swappable,

View File

@ -68,7 +68,7 @@ using std::string;
using std::string_view;
using std::vector;
struct B { };
struct B { bool operator<(const B&) const; };
static_assert( output_iterator< array<int, 1>::iterator, int > );
static_assert( output_iterator< array<B, 1>::iterator, B > );