سی‌پلاس‌پلاس ۲۳

C++23 نام غیررسمی نسخه بعدی استاندارد ISO / IEC 14882 برای زبان برنامه‌نویسی سی‌پلاس‌پلاس است که از C++20 پیروی می‌کند. پیش‌نویس فعلی N4910 است.

در فوریه ۲۰۲۰، در نشست نهایی برای C++20 که در پراگ صورت گرفت، یک طرح کلی برای C++23 تصویب شد: ویژگی‌های برنامه‌ریزی‌شده برای C++23 شامل پشتیبانی کتابخانه برای کوروتین‌ها، کتابخانه استاندارد ماژولار، اجراکننده‌ها و شبکه می‌باشد.

اولین جلسه WG21 با تمرکز بر C++23 قرار بود در اوایل ژوئن ۲۰۲۰ در وارنا برگزار شود، اما به دلیل دنیاگیری کووید-۱۹ لغو شد، مانند نشست نوامبر ۲۰۲۰ در نیویورک و نشست فوریه ۲۰۲۱ در کایلوا، هاوایی. همه جلسات در حال حاضر تا نوامبر ۲۰۲۲ به صورت مجازی برنامه‌ریزی شده‌اند.

سربرگ‌های جدید 

 <expected>
 <flat_map>
 <flat_set>
 <generator>
 <mdspan>
 <print>
 <spanstream>
 <stacktrace>
 <stdfloat>

سربرگ‌هایی که از زبان C گرفته شده‌اند:

 <stdatomic.h>

ویژگی‌های جدید 
در جلسات غیابیِWG21، تاکنون چند ویژگی جدید به پیش‌نویس C++23 اضافه شده‌است. اما موارد زیر پس از جلسه مجازی WG21 در ۹ نوامبر ۲۰۲۰، که در نظرسنجی‌ها تأیید شدند، اضافه شدند:
 پسوندهای لفظی برای std::size_t و نوع علامت‌دار مربوطه.
 تابع عضو contains std::basic_string و std::basic_string_view تا بررسی کند رشته دارای یک زیررشته یا کاراکتر است یا خیر.
 کتابخانه <stacktrace>، بر اساس Boost.Stacktrace
  std::is_scoped_enum
 سربرگ <stdatomic.h>، برای تطبیق با اتمیک‌های C

پس از نشست مجازی WG21 در ۲۲ فوریه ۲۰۲۱، ویژگی‌های زیر که توسط نظرسنجی‌ها تأیید شدند اضافه می‌شوند:
 بازسازی آداپتورهای Range ورودی و counted_iterator .
 حذف لیست پارامترهای خالی غیرضروری () از عبارات لامبدا.
 ریلکس‌سازی شرایط مورد نیاز برای time_point::clock.
 std::visit برای کلاس‌هایی که از std::variant مشتق شده‌اند.
 قفل‌کردن قفل‌شونده‌ها.
 Rangeهای شرطی اقتباسی.
 std::to_underlying.

پس از نشست مجازی عمومی استانداردهای ISO در ژوئن ۲۰۲۱، ویژگی‌های جدید و گزارش‌های نقص توسط نظرسنجی‌ها تأیید شد:
 
 محدود کردن تبدیل‌های متنی به .
 اجازه دادن به صفت‌های تکراری
 std::span بر مبنای جریان رشته <spanstream>.
 std::out_ptr و std::inout_ptr .
  برای std::optional ، std::variant ، و == std::type_info::operator .
 سازنده‌های جفت‌تکرارشونده برای std::stack (stack) و std::queue (queue).
 چند تغییر در کتابخانه ranges:
 تعمیم starts_with و ends_with برای محدوده‌های دلخواه.
 split_view به lazy_split_view تغییر نام داد و split_view جدید ایجاد شد.
 رفع محدودیت در join_view .
 حذف محدودیت default_initializable از view مفهومی.
 سازنده Range برای std::basic_string_view .
 ممنوعیت ساخت std::basic_string و std::basic_string_view از .
 std::invoke_r .
 بهبود در std::format .
 افزودن آرگومان‌های پیش‌فرض برای سازنده فورواردینگ std::pair .

پس از نشست مجازی عمومی استانداردهای ISO در اکتبر ۲۰۲۱، ویژگی‌های جدید و گزارش‌های نقص توسط نظرسنجی‌ها تأیید شد:
 متغیرهای غیر لفظی، برچسب‌ها و gotoها در توابع ، اما هنوز برای ارزیابی آنها در زمان کامپایل درست نیستند.
  واضح برای پارامتر شیء.
 تغییرات در مجموعه کاراکترها و رمزگذاری‌ها.
 پیش‌پردازشگرهای جدید: #elifdef و #elifndef .
 اجازه دادن به اعلان‌های alias در init-statement.
 بارگذاری بیش از حد اپراتور مشترک چندبُعدی (به عنوان مثال arr[1, 2]).
 کپی Decay در زبان:  یا {x}auto.
 تغییرات در کتابخانه قالب‌بندی متن:
 رفع کنترل محلی در قالب‌کننده‌های کرونو.
 استفاده از ارجاعات فوروارد در آرگومان‌های فرمت برای اجازه‌دادن به انواع شبهِ std::generator.
 اضافه کردن نوع std::pmr::stacktrace که معادل std::basic_stacktrace<std::pmr::polymorphic_allocator> است.
 تغییرات در کتابخانه ranges:
 تعریف دقیق view.
 جایگزینی الگوی تابع std::ranges::istream_view با الگوهای مستعار std::ranges::istream_view ، std::ranges::wistream_view ، و شی پوینت سفارشی‌سازی std::views::istream .
 خانواده آداپتورهای رنج zip:
 zip_view
 zip_transform_view
 adjacent_view (و std::views::pairwise معادل std::views::adjacent<2>)
 adjacent_transform_view (و std::views::pairwise_transform معادل std::views::adjacent_transform<2>)
 std::move_only_function .
 عملیات مونادیک برای std::optional .
 قالب تابع عضو std::basic_string::resize_and_overwrite .
 چاپ نشانگرهای فرار ().
 std::byteswap .
 اضافه‌بارهای پاک کردن ناهمگن برای ظروف انجمنی.
 هر خصوصیتی از std::span و std::basic_string_view قابل کپی‌کردن است.
 افزودن خصیصه‌های  شرطی به std::exchange .
 خصوصیات اصلاح شده و استفاده از انواع کلاس عدد صحیح.
 هدرهای C واضح‌تر شدند. هدرها در کدهایی که فقط باید سی‌پلاس‌پلاس معتبر باشند، مفید نیستند. بنابراین، هدرهای C باید توسط کتابخانه استاندارد سی‌پلاس‌پلاس به‌عنوان یک بخش کاملاً پشتیبانی‌شده و نه منسوخ ارائه شوند، اما همچنین باید از استفاده از آنها در کدهایی که کد قابلیت همکاری چند زبانه نیستند، جلوگیری کرد. [. .] این پیشنهاد باعث می‌شود هدرهای C دیگر منسوخ نشوند، بنابراین هیچ تهدید رسمی‌ای برای حذف در آینده وجود ندارد.»

پس از نشست مجازی WG21 در ۷ فوریه ۲۰۲۲، ویژگی‌های زیر که توسط نظرسنجی‌ها تأیید شدند اضافه می‌شوند:
 std::expected
 constexpr برای cmath و cstdlib
 تابع علامت‌گذاری کد غیرقابل دسترسی
 ranges::to
 منسوخ‌شدنِ std::aligned_storage و std::aligned_union.
 یک type trait برای تشخیص اتصال مرجع به موقت.
 constexpr شدنِ std::unique_ptr
 پشتیبانی پایپ برای آداپتورهای محدوده تعریف شده توسط کاربر.
 ranges::iota ، ranges::shift_left و ranges::shift_right
 views::join_with
 آداپتورهای محدوده پنجره: views::chunk و views::slide
 views::chunk_by

ویژگی‌های حذف شده 
 پشتیبانی جمع‌آوری زباله که در C++11 اضافه شده بود، با وجود بسیاری از پیاده‌سازی‌های GC موجود برای سی‌پلاس‌پلاس حذف شد. Garbage Collection در سی‌پلاس‌پلاس به وضوح برای یکسری برنامه خاص مفید است. با این حال، جمع‌آوری زباله همان‌طور که توسط استاندارد مشخص شده‌است برای آن برنامه‌ها مفید نیست.

منابع 

خانواده زبان برنامه‌نویسی الگول
خانواده زبان برنامه‌نویسی سی++
زبان‌های برنامه‌نویسی ایستا
زبان‌های برنامه‌نویسی سطح بالا
سی++