public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] Define std::allocator<T>::is_always_equal
@ 2016-10-10 12:18 Jonathan Wakely
  0 siblings, 0 replies; only message in thread
From: Jonathan Wakely @ 2016-10-10 12:18 UTC (permalink / raw)
  To: libstdc++, gcc-patches

[-- Attachment #1: Type: text/plain, Size: 639 bytes --]

I somehow only added the is_always_equal nested typedef to the
allocator<void> specialization, not the primary template. All the
containers still do the right thing, because they use
allocator_traits<allocator<T>>::is_always_equal which gives the right
answer, but we still need to provide allocator<T>::is_always_equal to
be conforming.

	* include/bits/allocator.h (allocator<T>::is_always_equal): Define.
	* testsuite/20_util/allocator/requirements/typedefs.cc: Test for
	is_always_equal.
	* testsuite/util/testsuite_allocator.h
	(uneq_allocator::is_always_equal): Define as false_type.

Tested powerpc64le-linux, committed to trunk/



[-- Attachment #2: patch.txt --]
[-- Type: text/plain, Size: 2683 bytes --]

commit f5020f0fa1dc815eda37d8b1040e7c16f1554114
Author: Jonathan Wakely <jwakely@redhat.com>
Date:   Mon Oct 10 12:04:24 2016 +0100

    Define std::allocator<T>::is_always_equal
    
    	* include/bits/allocator.h (allocator<T>::is_always_equal): Define.
    	* testsuite/20_util/allocator/requirements/typedefs.cc: Test for
    	is_always_equal.
    	* testsuite/util/testsuite_allocator.h
    	(uneq_allocator::is_always_equal): Define as false_type.

diff --git a/libstdc++-v3/include/bits/allocator.h b/libstdc++-v3/include/bits/allocator.h
index 984d800..8e78165 100644
--- a/libstdc++-v3/include/bits/allocator.h
+++ b/libstdc++-v3/include/bits/allocator.h
@@ -50,6 +50,9 @@
 #endif
 
 #define __cpp_lib_incomplete_container_elements 201505
+#if __cplusplus >= 201103L
+# define __cpp_lib_allocator_is_always_equal 201411
+#endif
 
 namespace std _GLIBCXX_VISIBILITY(default)
 {
@@ -80,7 +83,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       // 2103. std::allocator propagate_on_container_move_assignment
       typedef true_type propagate_on_container_move_assignment;
 
-#define __cpp_lib_allocator_is_always_equal 201411
       typedef true_type is_always_equal;
 #endif
     };
@@ -113,6 +115,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       // _GLIBCXX_RESOLVE_LIB_DEFECTS
       // 2103. std::allocator propagate_on_container_move_assignment
       typedef true_type propagate_on_container_move_assignment;
+
+      typedef true_type is_always_equal;
 #endif
 
       allocator() throw() { }
diff --git a/libstdc++-v3/testsuite/20_util/allocator/requirements/typedefs.cc b/libstdc++-v3/testsuite/20_util/allocator/requirements/typedefs.cc
index 028daa9..1b3f14f 100644
--- a/libstdc++-v3/testsuite/20_util/allocator/requirements/typedefs.cc
+++ b/libstdc++-v3/testsuite/20_util/allocator/requirements/typedefs.cc
@@ -48,3 +48,6 @@ static_assert( is_same<allocator<int>::rebind<char>::other,
 static_assert( is_same<allocator<int>::propagate_on_container_move_assignment,
                        std::true_type>::value,
                "propagate_on_container_move_assignment" );
+
+static_assert( is_same<allocator<int>::is_always_equal, std::true_type>::value,
+               "is_always_equal" );
diff --git a/libstdc++-v3/testsuite/util/testsuite_allocator.h b/libstdc++-v3/testsuite/util/testsuite_allocator.h
index 8537a83..dd7e22d 100644
--- a/libstdc++-v3/testsuite/util/testsuite_allocator.h
+++ b/libstdc++-v3/testsuite/util/testsuite_allocator.h
@@ -297,6 +297,7 @@ namespace __gnu_test
 
 #if __cplusplus >= 201103L
       typedef std::true_type			propagate_on_container_swap;
+      typedef std::false_type			is_always_equal;
 #endif
 
       template<typename Tp1>

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2016-10-10 12:18 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-10-10 12:18 [PATCH] Define std::allocator<T>::is_always_equal Jonathan Wakely

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).