diff mbox series

Define __cpp_lib_erase_if feature test macro

Message ID 20190110134929.GA9222@redhat.com
State New
Headers show
Series Define __cpp_lib_erase_if feature test macro | expand

Commit Message

Jonathan Wakely Jan. 10, 2019, 1:49 p.m. UTC
The C++2a draft specifies the value 201811L for this, but as an
extension we return the number of elements erased. This is expected to
be standardised, so the macro has the value 201900L until a proper value
is specified in the draft.

	* include/bits/erase_if.h: Define __cpp_lib_erase_if.
	* include/std/deque: Likewise.
	* include/std/forward_list: Likewise.
	* include/std/list: Likewise.
	* include/std/string: Likewise.
	* include/std/vector: Likewise.
	* include/std/version: Likewise.
	* testsuite/21_strings/basic_string/erasure.cc: Test macro.
	* testsuite/23_containers/deque/erasure.cc: Likewise.
	* testsuite/23_containers/forward_list/erasure.cc: Likewise.
	* testsuite/23_containers/list/erasure.cc: Likewise.
	* testsuite/23_containers/map/erasure.cc: Likewise.
	* testsuite/23_containers/set/erasure.cc: Likewise.
	* testsuite/23_containers/unordered_map/erasure.cc: Likewise.
	* testsuite/23_containers/unordered_set/erasure.cc: Likewise.
	* testsuite/23_containers/vector/erasure.cc: Likewise.

Tested x86_64-linux, committed to trunk.
commit 7d6b3fe12f1c70b8396627c60fbff30422705087
Author: Jonathan Wakely <jwakely@redhat.com>
Date:   Thu Jan 10 13:26:17 2019 +0000

    Define __cpp_lib_erase_if feature test macro
    
    The C++2a draft specifies the value 201811L for this, but as an
    extension we return the number of elements erased. This is expected to
    be standardised, so the macro has the value 201900L until a proper value
    is specified in the draft.
    
            * include/bits/erase_if.h: Define __cpp_lib_erase_if.
            * include/std/deque: Likewise.
            * include/std/forward_list: Likewise.
            * include/std/list: Likewise.
            * include/std/string: Likewise.
            * include/std/vector: Likewise.
            * include/std/version: Likewise.
            * testsuite/21_strings/basic_string/erasure.cc: Test macro.
            * testsuite/23_containers/deque/erasure.cc: Likewise.
            * testsuite/23_containers/forward_list/erasure.cc: Likewise.
            * testsuite/23_containers/list/erasure.cc: Likewise.
            * testsuite/23_containers/map/erasure.cc: Likewise.
            * testsuite/23_containers/set/erasure.cc: Likewise.
            * testsuite/23_containers/unordered_map/erasure.cc: Likewise.
            * testsuite/23_containers/unordered_set/erasure.cc: Likewise.
            * testsuite/23_containers/vector/erasure.cc: Likewise.

Comments

Jonathan Wakely Jan. 11, 2019, 11:40 p.m. UTC | #1
On 10/01/19 13:49 +0000, Jonathan Wakely wrote:
>The C++2a draft specifies the value 201811L for this, but as an
>extension we return the number of elements erased. This is expected to
>be standardised, so the macro has the value 201900L until a proper value
>is specified in the draft.
>
>	* include/bits/erase_if.h: Define __cpp_lib_erase_if.
>	* include/std/deque: Likewise.
>	* include/std/forward_list: Likewise.
>	* include/std/list: Likewise.
>	* include/std/string: Likewise.
>	* include/std/vector: Likewise.
>	* include/std/version: Likewise.
>	* testsuite/21_strings/basic_string/erasure.cc: Test macro.
>	* testsuite/23_containers/deque/erasure.cc: Likewise.
>	* testsuite/23_containers/forward_list/erasure.cc: Likewise.
>	* testsuite/23_containers/list/erasure.cc: Likewise.
>	* testsuite/23_containers/map/erasure.cc: Likewise.
>	* testsuite/23_containers/set/erasure.cc: Likewise.
>	* testsuite/23_containers/unordered_map/erasure.cc: Likewise.
>	* testsuite/23_containers/unordered_set/erasure.cc: Likewise.
>	* testsuite/23_containers/vector/erasure.cc: Likewise.
>
>Tested x86_64-linux, committed to trunk.
>



>diff --git a/libstdc++-v3/include/std/version b/libstdc++-v3/include/std/version
>index f090fba0308..e11ae3a688a 100644
>--- a/libstdc++-v3/include/std/version
>+++ b/libstdc++-v3/include/std/version
>@@ -96,6 +96,7 @@
> #define __cpp_lib_clamp 201603
> #define __cpp_lib_constexpr_char_traits 201611
> #define __cpp_lib_enable_shared_from_this 201603
>+#define __cpp_lib_erase_if 201900L
> #define __cpp_lib_filesystem 201703
> #define __cpp_lib_gcd 201606
> #define __cpp_lib_gcd_lcm 201606

I put this in the C++17 group, but it's a C++2a feature.

Fixed with this patch, committed to trunk.
commit e60c82dfba1812b17d427382239cec4d7341bc75
Author: Jonathan Wakely <jwakely@redhat.com>
Date:   Fri Jan 11 22:29:21 2019 +0000

    Fix location of __cpp_lib_erase_if macro
    
    This macro should only be defined for C++2a, not C++17.
    
            * include/std/version (__cpp_lib_erase_if): Move to C++20 group.

diff --git a/libstdc++-v3/include/std/version b/libstdc++-v3/include/std/version
index 903b75b483a..e9a1f1251af 100644
--- a/libstdc++-v3/include/std/version
+++ b/libstdc++-v3/include/std/version
@@ -96,7 +96,6 @@
 #define __cpp_lib_clamp 201603
 #define __cpp_lib_constexpr_char_traits 201611
 #define __cpp_lib_enable_shared_from_this 201603
-#define __cpp_lib_erase_if 201900L
 #define __cpp_lib_filesystem 201703
 #define __cpp_lib_gcd 201606
 #define __cpp_lib_gcd_lcm 201606
@@ -142,6 +141,7 @@
 
 #if __cplusplus > 201703L
 // c++2a
+#define __cpp_lib_erase_if 201900L
 #ifdef _GLIBCXX_HAVE_BUILTIN_IS_CONSTANT_EVALUATED
 # define __cpp_lib_is_constant_evaluated 201811L
 #endif
diff mbox series

Patch

diff --git a/libstdc++-v3/include/bits/erase_if.h b/libstdc++-v3/include/bits/erase_if.h
index 9e865c6abb5..d84f5ffc8ed 100644
--- a/libstdc++-v3/include/bits/erase_if.h
+++ b/libstdc++-v3/include/bits/erase_if.h
@@ -38,6 +38,8 @@  namespace std
 {
 _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
+#define __cpp_lib_erase_if 201900L
+
   namespace __detail
   {
     template<typename _Container, typename _Predicate>
diff --git a/libstdc++-v3/include/std/deque b/libstdc++-v3/include/std/deque
index 7932b1cdea5..ed4927e13b7 100644
--- a/libstdc++-v3/include/std/deque
+++ b/libstdc++-v3/include/std/deque
@@ -94,6 +94,9 @@  _GLIBCXX_END_NAMESPACE_VERSION
 namespace std _GLIBCXX_VISIBILITY(default)
 {
 _GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+#define __cpp_lib_erase_if 201900L
+
   template<typename _Tp, typename _Alloc, typename _Predicate>
     inline typename deque<_Tp, _Alloc>::size_type
     erase_if(deque<_Tp, _Alloc>& __cont, _Predicate __pred)
diff --git a/libstdc++-v3/include/std/forward_list b/libstdc++-v3/include/std/forward_list
index 93c95904fc3..3d3b6d4f5f6 100644
--- a/libstdc++-v3/include/std/forward_list
+++ b/libstdc++-v3/include/std/forward_list
@@ -65,6 +65,9 @@  _GLIBCXX_END_NAMESPACE_VERSION
 namespace std _GLIBCXX_VISIBILITY(default)
 {
 _GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+#define __cpp_lib_erase_if 201900L
+
   template<typename _Tp, typename _Alloc, typename _Predicate>
     inline typename forward_list<_Tp, _Alloc>::size_type 
     erase_if(forward_list<_Tp, _Alloc>& __cont, _Predicate __pred)
diff --git a/libstdc++-v3/include/std/list b/libstdc++-v3/include/std/list
index 5ea9a9619ba..7b02e8685d4 100644
--- a/libstdc++-v3/include/std/list
+++ b/libstdc++-v3/include/std/list
@@ -89,6 +89,9 @@  _GLIBCXX_END_NAMESPACE_VERSION
 namespace std _GLIBCXX_VISIBILITY(default)
 {
 _GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+#define __cpp_lib_erase_if 201900L
+
   template<typename _Tp, typename _Alloc, typename _Predicate>
     inline typename list<_Tp, _Alloc>::size_type
     erase_if(list<_Tp, _Alloc>& __cont, _Predicate __pred)
diff --git a/libstdc++-v3/include/std/string b/libstdc++-v3/include/std/string
index dc718b87357..caa54c24100 100644
--- a/libstdc++-v3/include/std/string
+++ b/libstdc++-v3/include/std/string
@@ -79,6 +79,9 @@  _GLIBCXX_END_NAMESPACE_VERSION
 namespace std _GLIBCXX_VISIBILITY(default)
 {
 _GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+#define __cpp_lib_erase_if 201900L
+
   template<typename _CharT, typename _Traits, typename _Alloc,
 	   typename _Predicate>
     inline typename basic_string<_CharT, _Traits, _Alloc>::size_type
diff --git a/libstdc++-v3/include/std/vector b/libstdc++-v3/include/std/vector
index 059451801cb..2c90765b058 100644
--- a/libstdc++-v3/include/std/vector
+++ b/libstdc++-v3/include/std/vector
@@ -97,6 +97,9 @@  _GLIBCXX_END_NAMESPACE_VERSION
 namespace std _GLIBCXX_VISIBILITY(default)
 {
 _GLIBCXX_BEGIN_NAMESPACE_VERSION
+
+#define __cpp_lib_erase_if 201900L
+
   template<typename _Tp, typename _Alloc, typename _Predicate>
     inline typename vector<_Tp, _Alloc>::size_type
     erase_if(vector<_Tp, _Alloc>& __cont, _Predicate __pred)
diff --git a/libstdc++-v3/include/std/version b/libstdc++-v3/include/std/version
index f090fba0308..e11ae3a688a 100644
--- a/libstdc++-v3/include/std/version
+++ b/libstdc++-v3/include/std/version
@@ -96,6 +96,7 @@ 
 #define __cpp_lib_clamp 201603
 #define __cpp_lib_constexpr_char_traits 201611
 #define __cpp_lib_enable_shared_from_this 201603
+#define __cpp_lib_erase_if 201900L
 #define __cpp_lib_filesystem 201703
 #define __cpp_lib_gcd 201606
 #define __cpp_lib_gcd_lcm 201606
diff --git a/libstdc++-v3/testsuite/23_containers/deque/erasure.cc b/libstdc++-v3/testsuite/23_containers/deque/erasure.cc
index 4fe6f1d0d6f..39ea6deecc2 100644
--- a/libstdc++-v3/testsuite/23_containers/deque/erasure.cc
+++ b/libstdc++-v3/testsuite/23_containers/deque/erasure.cc
@@ -21,6 +21,12 @@ 
 #include <deque>
 #include <testsuite_hooks.h>
 
+#ifndef __cpp_lib_erase_if
+# error "Feature-test macro for erase_if missing"
+#elif __cpp_lib_erase_if < 201811
+# error "Feature-test macro for erase_if has wrong value"
+#endif
+
 void
 test01()
 {
diff --git a/libstdc++-v3/testsuite/23_containers/forward_list/erasure.cc b/libstdc++-v3/testsuite/23_containers/forward_list/erasure.cc
index 3d5c9fdcd57..724a720f654 100644
--- a/libstdc++-v3/testsuite/23_containers/forward_list/erasure.cc
+++ b/libstdc++-v3/testsuite/23_containers/forward_list/erasure.cc
@@ -21,6 +21,12 @@ 
 #include <forward_list>
 #include <testsuite_hooks.h>
 
+#ifndef __cpp_lib_erase_if
+# error "Feature-test macro for erase_if missing"
+#elif __cpp_lib_erase_if < 201811
+# error "Feature-test macro for erase_if has wrong value"
+#endif
+
 void
 test01()
 {
diff --git a/libstdc++-v3/testsuite/23_containers/list/erasure.cc b/libstdc++-v3/testsuite/23_containers/list/erasure.cc
index 87dfee990fc..a9927b484e1 100644
--- a/libstdc++-v3/testsuite/23_containers/list/erasure.cc
+++ b/libstdc++-v3/testsuite/23_containers/list/erasure.cc
@@ -21,6 +21,12 @@ 
 #include <list>
 #include <testsuite_hooks.h>
 
+#ifndef __cpp_lib_erase_if
+# error "Feature-test macro for erase_if missing"
+#elif __cpp_lib_erase_if < 201811
+# error "Feature-test macro for erase_if has wrong value"
+#endif
+
 void
 test01()
 {
diff --git a/libstdc++-v3/testsuite/23_containers/map/erasure.cc b/libstdc++-v3/testsuite/23_containers/map/erasure.cc
index a19e805f7fc..d8a57160865 100644
--- a/libstdc++-v3/testsuite/23_containers/map/erasure.cc
+++ b/libstdc++-v3/testsuite/23_containers/map/erasure.cc
@@ -21,6 +21,12 @@ 
 #include <map>
 #include <testsuite_hooks.h>
 
+#ifndef __cpp_lib_erase_if
+# error "Feature-test macro for erase_if missing"
+#elif __cpp_lib_erase_if < 201811
+# error "Feature-test macro for erase_if has wrong value"
+#endif
+
 auto is_odd_pair = [](const std::pair<const int, std::string>& p)
 {
   return p.first % 2 != 0;
diff --git a/libstdc++-v3/testsuite/23_containers/set/erasure.cc b/libstdc++-v3/testsuite/23_containers/set/erasure.cc
index 0e178e9a177..2412d69f75c 100644
--- a/libstdc++-v3/testsuite/23_containers/set/erasure.cc
+++ b/libstdc++-v3/testsuite/23_containers/set/erasure.cc
@@ -21,6 +21,12 @@ 
 #include <set>
 #include <testsuite_hooks.h>
 
+#ifndef __cpp_lib_erase_if
+# error "Feature-test macro for erase_if missing"
+#elif __cpp_lib_erase_if < 201811
+# error "Feature-test macro for erase_if has wrong value"
+#endif
+
 auto is_odd = [](const int i) { return i % 2 != 0; };
 
 void
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/erasure.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/erasure.cc
index f652dd2b5a7..35190a0d19e 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_map/erasure.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_map/erasure.cc
@@ -21,6 +21,12 @@ 
 #include <unordered_map>
 #include <testsuite_hooks.h>
 
+#ifndef __cpp_lib_erase_if
+# error "Feature-test macro for erase_if missing"
+#elif __cpp_lib_erase_if < 201811
+# error "Feature-test macro for erase_if has wrong value"
+#endif
+
 auto is_odd_pair = [](const std::pair<const int, std::string>& p)
 {
   return p.first % 2 != 0;
diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/erasure.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/erasure.cc
index 3f59bfdc205..5ffabf538bd 100644
--- a/libstdc++-v3/testsuite/23_containers/unordered_set/erasure.cc
+++ b/libstdc++-v3/testsuite/23_containers/unordered_set/erasure.cc
@@ -21,6 +21,12 @@ 
 #include <unordered_set>
 #include <testsuite_hooks.h>
 
+#ifndef __cpp_lib_erase_if
+# error "Feature-test macro for erase_if missing"
+#elif __cpp_lib_erase_if < 201811
+# error "Feature-test macro for erase_if has wrong value"
+#endif
+
 void
 test01()
 {
diff --git a/libstdc++-v3/testsuite/23_containers/vector/erasure.cc b/libstdc++-v3/testsuite/23_containers/vector/erasure.cc
index 9868252816c..0a23c3f0d12 100644
--- a/libstdc++-v3/testsuite/23_containers/vector/erasure.cc
+++ b/libstdc++-v3/testsuite/23_containers/vector/erasure.cc
@@ -21,6 +21,12 @@ 
 #include <vector>
 #include <testsuite_hooks.h>
 
+#ifndef __cpp_lib_erase_if
+# error "Feature-test macro for erase_if missing"
+#elif __cpp_lib_erase_if < 201811
+# error "Feature-test macro for erase_if has wrong value"
+#endif
+
 void
 test01()
 {