سی‌پلاس‌پلاس ۲۳
ویژگی‌های جدید

در جلسات غیابیِ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 در ژوئن ۲۰۲۱، ویژگی‌های جدید و گزارش‌های نقص توسط نظرسنجی‌ها تأیید شد:
if consteval
محدود کردن تبدیل‌های متنی به bool.
اجازه دادن به صفت‌های تکراری
std::span بر مبنای جریان رشته <spanstream>.
std::out_ptr و std::inout_ptr .
constexpr برای 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 از nullptr.
std::invoke_r .
بهبود در std::format .
افزودن آرگومان‌های پیش‌فرض برای سازنده فورواردینگ std::pair .
پس از نشست مجازی عمومی استانداردهای ISO در اکتبر ۲۰۲۱، ویژگی‌های جدید و گزارش‌های نقص توسط نظرسنجی‌ها تأیید شد:
متغیرهای غیر لفظی، برچسب‌ها و gotoها در توابع constexpr، اما هنوز برای ارزیابی آنها در زمان کامپایل درست نیستند.
this واضح برای پارامتر شیء.
تغییرات در مجموعه کاراکترها و رمزگذاری‌ها.
پیش‌پردازشگرهای جدید: #elifdef و #elifndef .
اجازه دادن به اعلان‌های alias در init-statement.
بارگذاری بیش از حد اپراتور مشترک چندبُعدی (به عنوان مثال arr[1, 2]).
کپی Decay در زبان: auto(x) یا {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 .
چاپ نشانگرهای فرار (volatile T*).
std::byteswap .
اضافه‌بارهای پاک کردن ناهمگن برای ظروف انجمنی.
هر خصوصیتی از std::span و std::basic_string_view قابل کپی‌کردن است.
افزودن خصیصه‌های noexcept شرطی به 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