[gcc r17-4234] libstdc++: [_GLIBCXX_DEBUG] Simplify constant-evaluated checks

Francois Dumont fdumont@gcc.gnu.org
Mon Sep 14 17:19:35 GMT 2026


https://gcc.gnu.org/g:d22b7d0195dbe3ebe52fd71f43f42aac956d3e5e

commit r17-4234-gd22b7d0195dbe3ebe52fd71f43f42aac956d3e5e
Author: François Dumont <frs.dumont@gmail.com>
Date:   Thu Sep 10 07:01:07 2026 +0200

    libstdc++: [_GLIBCXX_DEBUG] Simplify constant-evaluated checks
    
    In the C++26 std::__debug::inplace_vector implementation we can use:
    
    if consteval
    {
      ...
    }
    
    rather than:
    
    if (std::is_constant_evaluated())
    
    libstdc++-v3/ChangeLog:
    
            * include/debug/inplace_vector
            (inplace_vector::emplace): Replace usages of std::is_constant_evaluated
            by consteval.
            (inplace_vector::insert): Likewise.
            (inplace_vector::erase): Likewise.

Diff:
---
 libstdc++-v3/include/debug/inplace_vector | 49 +++++++++++++++++++------------
 1 file changed, 31 insertions(+), 18 deletions(-)

diff --git a/libstdc++-v3/include/debug/inplace_vector b/libstdc++-v3/include/debug/inplace_vector
index e579e8636f98..a0bf4c854423 100644
--- a/libstdc++-v3/include/debug/inplace_vector
+++ b/libstdc++-v3/include/debug/inplace_vector
@@ -400,10 +400,12 @@ namespace __debug
 	constexpr iterator
 	emplace(const_iterator __position, _Args&&... __args)
 	{
-	  if (std::is_constant_evaluated())
-	    return iterator(_Base::emplace(__position.base(),
-					   std::forward<_Args>(__args)...),
-			    this);
+	  if consteval
+	    {
+	      return iterator(_Base::emplace(__position.base(),
+					     std::forward<_Args>(__args)...),
+			      this);
+	    }
 
 	  __glibcxx_check_insert(__position);
 	  const difference_type __offset = __position.base() - _Base::cbegin();
@@ -424,10 +426,12 @@ namespace __debug
       constexpr iterator
       insert(const_iterator __position, size_type __n, const _Tp& __x)
       {
-	if (std::is_constant_evaluated())
-	  return iterator(_Base::insert(__position.base(), __n, __x), this);
+	if consteval
+	  {
+	    return iterator(_Base::insert(__position.base(), __n, __x), this);
+	  }
 
-	  __glibcxx_check_insert(__position);
+	__glibcxx_check_insert(__position);
 	const difference_type __offset = __position.base() - _Base::cbegin();
 	_Base_iterator __res = _Base::insert(__position.base(), __n, __x);
 	_M_invalidate_after_nth(__offset);
@@ -439,10 +443,13 @@ namespace __debug
 	insert(const_iterator __position, _InputIterator __first,
 	       _InputIterator __last)
 	{
-	  if (std::is_constant_evaluated())
-	    return iterator(_Base::insert(__position.base(),
-					  __gnu_debug::__unsafe(__first),
-					  __gnu_debug::__unsafe(__last)), this);
+	  if consteval
+	    {
+	      return iterator(_Base::insert(__position.base(),
+					    __gnu_debug::__unsafe(__first),
+					    __gnu_debug::__unsafe(__last)),
+			      this);
+	    }
 
 	  typename __gnu_debug::_Distance_traits<_InputIterator>::__type __dist;
 	  __glibcxx_check_insert_range(__position, __first, __last, __dist);
@@ -476,8 +483,10 @@ namespace __debug
       constexpr iterator
       insert(const_iterator __position, initializer_list<_Tp> __il)
       {
-	if (std::is_constant_evaluated())
-	  return iterator(_Base::insert(__position.base(), __il), this);
+	if consteval
+	  {
+	    return iterator(_Base::insert(__position.base(), __il), this);
+	  }
 
 	__glibcxx_check_insert(__position);
 	const auto __size = size();
@@ -491,8 +500,10 @@ namespace __debug
       constexpr iterator
       erase(const_iterator __position)
       {
-	if (std::is_constant_evaluated())
-	  return iterator(_Base::erase(__position.base()), this);
+	if consteval
+	  {
+	    return iterator(_Base::erase(__position.base()), this);
+	  }
 
 	__glibcxx_check_erase(__position);
 	difference_type __offset = __position.base() - _Base::cbegin();
@@ -504,9 +515,11 @@ namespace __debug
       constexpr iterator
       erase(const_iterator __first, const_iterator __last)
       {
-	if (std::is_constant_evaluated())
-	  return iterator(_Base::erase(__first.base(), __last.base()),
-			  this);
+	if consteval
+	  {
+	    return iterator(_Base::erase(__first.base(), __last.base()),
+			    this);
+	  }
 
 	__glibcxx_check_erase_range(__first, __last);


More information about the Libstdc++-cvs mailing list