C++20
The Big Four2020 · -std=c++20
The largest revision since C++11. Concepts, Ranges, Coroutines, and Modules define the modern C++ landscape.
40Core Language
133STL Components
-std=c++20Key Features
Concepts
Ranges
Coroutines
Modules
std::span
Three-way Comparison
Core Language(40)
Concepts (C++20 Addition)advancedConstraints and Requires Clauses (C++20 Addition)advancedConstrained Templates (C++20 Addition)advancedAbbreviated Function Templates (C++20 Addition)advancedThree-Way Comparison Operator (Spaceship Operator, <=>) (C++20 Addition)advancedstd::strong_ordering (C++20 Addition)advancedstd::weak_ordering (C++20 Addition)advancedstd::partial_ordering (C++20 Addition)advancedLambda Improvements (C++20 Evolution)advancedStateless Lambda Call Operator as consteval (C++20 Addition)advancedLambda Capture of [this] by Value (C++20 Evolution)advancedTemplate Lambdas (C++20 Addition)advancedConstexpr Improvements (C++20 Evolution)advancedConstexpr Virtual Functions (C++20 Addition)advancedConstexpr Dynamic Memory Allocation (C++20 Addition)advancedConstexpr std::string (C++20 Evolution)advancedConstexpr std::vector (C++20 Evolution)advancedImmediate Functions (consteval) (C++20 Addition)advancedConstant Evaluation for Non-Type Template Parameters (C++20 Addition)advancedstd::is_constant_evaluated (C++20 Addition)advancedModules (C++20 Addition)advancedImport/Export Declarations (C++20 Addition)advancedCoroutines (C++20 Addition)advancedco_await (C++20 Addition)advancedco_yield (C++20 Addition)advancedco_return (C++20 Addition)advancedstd::source_location (C++20 Addition)advancedstd::endian (C++20 Addition)advancedDesignated Initializers (C++20 Addition)advanced[[no_unique_address]] Attribute (C++20 Addition)advancedconstinit (C++20 Addition)advancedConditional explicit (explicit(bool)) (C++20 Addition)advancedAggregate Initialization with Parentheses (C++20 Evolution)advancedusing enum (C++20 Addition)advancedClass Template Argument Deduction Enhancements (C++20 Evolution)advanced[[likely]] and [[unlikely]] Attributes (C++20 Addition)advancedchar8_t (C++20 Addition)advancedNon-Type Template Parameters of Class Type (C++20 Addition)advancedDestroying Delete (C++20 Addition)advancedFeature Test Macros (C++20 Addition)advanced
STL Components(133)
std::span (C++20 Addition)std::same_as (C++20 Addition)std::derived_from (C++20 Addition)std::convertible_to (C++20 Addition)std::integral (C++20 Addition)std::floating_point (C++20 Addition)std::signed_integral / std::unsigned_integral (C++20 Addition)std::common_reference_with (C++20 Addition)std::common_with (C++20 Addition)std::assignable_from (C++20 Addition)std::swappable (C++20 Addition)std::destructible (C++20 Addition)std::constructible_from (C++20 Addition)std::default_initializable (C++20 Addition)std::move_constructible (C++20 Addition)std::copy_constructible (C++20 Addition)std::equality_comparable (C++20 Addition)std::totally_ordered (C++20 Addition)std::regular (C++20 Addition)std::semiregular (C++20 Addition)std::invocable / std::regular_invocable (C++20 Addition)std::predicate (C++20 Addition)std::relation (C++20 Addition)std::ranges::range (C++20 Addition)std::ranges::input_range (C++20 Addition)std::ranges::output_range (C++20 Addition)std::ranges::forward_range (C++20 Addition)std::ranges::bidirectional_range (C++20 Addition)std::ranges::random_access_range (C++20 Addition)std::ranges::contiguous_range (C++20 Addition)std::ranges::sized_range (C++20 Addition)std::ranges::view (C++20 Addition)std::ranges::viewable_range (C++20 Addition)std::ranges::borrowed_range (C++20 Addition)std::ranges::common_range (C++20 Addition)Range Type Traits: range_value_t, range_reference_t, range_difference_t, range_size_t (C++20 Addition)Range Access CPOs: std::ranges::begin / end / cbegin / cend / rbegin / rend / crbegin / crend (C++20 Addition)Range Query CPOs: std::ranges::size / ssize / empty / data / cdata (C++20 Addition)std::views::all / std::ranges::ref_view / std::ranges::owning_view (C++20 Addition)std::views::filter / std::ranges::filter_view (C++20 Addition)std::views::transform / std::ranges::transform_view (C++20 Addition)std::views::take / std::ranges::take_view (C++20 Addition)std::views::take_while / std::ranges::take_while_view (C++20 Addition)std::views::drop / std::ranges::drop_view (C++20 Addition)std::views::drop_while / std::ranges::drop_while_view (C++20 Addition)std::views::join / std::ranges::join_view (C++20 Addition)std::views::split / std::ranges::split_view (C++20 Addition)std::views::counted (C++20 Addition)std::views::common / std::ranges::common_view (C++20 Addition)std::views::reverse / std::ranges::reverse_view (C++20 Addition)std::views::elements / std::ranges::elements_view (C++20 Addition)std::views::keys / std::ranges::keys_view (C++20 Addition)std::views::values / std::ranges::values_view (C++20 Addition)std::views::iota / std::ranges::iota_view (C++20 Addition)std::views::empty / std::ranges::empty_view (C++20 Addition)std::views::single / std::ranges::single_view (C++20 Addition)std::views::filter (pipe syntax) (C++20 Addition)std::views::transform (pipe syntax) (C++20 Addition)std::views::take / take_while / drop / drop_while (pipe syntax) (C++20 Addition)std::views::join / split / common / reverse (pipe syntax) (C++20 Addition)std::views::elements / keys / values (pipe syntax) (C++20 Addition)std::views::iota / empty / single (factory adaptors) (C++20 Addition)Composing Range Adaptors with Pipe Syntax (C++20 Addition)std::ranges::for_each / for_each_n (C++20 Addition)std::ranges::find / find_if / find_if_not (C++20 Addition)std::ranges::find_end / find_first_of / adjacent_find (C++20 Addition)std::ranges::count / count_if (C++20 Addition)std::ranges::mismatch / equal (C++20 Addition)std::ranges::search / search_n (C++20 Addition)std::ranges::copy / copy_if / copy_n / copy_backward (C++20 Addition)std::ranges::move / move_backward (C++20 Addition)std::ranges::fill / fill_n / generate / generate_n (C++20 Addition)std::ranges::transform (algorithm) (C++20 Addition)std::ranges::remove / remove_if (C++20 Addition)std::ranges::replace / replace_if (C++20 Addition)std::ranges::swap_ranges / reverse / reverse_copy (C++20 Addition)std::ranges::rotate / rotate_copy (C++20 Addition)std::ranges::unique / unique_copy (C++20 Addition)std::ranges::partition / stable_partition (C++20 Addition)std::ranges::sort / stable_sort (C++20 Addition)std::ranges::partial_sort / partial_sort_copy / nth_element (C++20 Addition)std::ranges::merge / inplace_merge (C++20 Addition)std::ranges::includes / set_union / set_intersection / set_difference / set_symmetric_difference (C++20 Addition)std::ranges::push_heap / pop_heap / make_heap / sort_heap (C++20 Addition)std::ranges::min / max / minmax (C++20 Addition)std::ranges::min_element / max_element / minmax_element (C++20 Addition)std::ranges::lexicographical_compare (C++20 Addition)std::ranges::next_permutation / prev_permutation (C++20 Addition)std::ranges::all_of / any_of / none_of (C++20 Addition)std::ranges::is_sorted / is_sorted_until (C++20 Addition)std::ranges::is_permutation (C++20 Addition)std::ranges::is_heap / is_heap_until (C++20 Addition)std::shift_left / std::shift_right (C++20 Addition)std::ranges::starts_with / std::ranges::ends_with (C++20 Addition)std::ranges::contains (C++20 Addition)std::erase / std::erase_if (C++20 Addition)std::bit_cast (C++20 Addition)std::format / std::format_to / std::format_to_n / std::formatted_size / std::vformat / std::make_format_args (C++20 Addition)std::syncbuf / std::osyncstream (C++20 Addition)std::bind_front (C++20 Addition)std::identity (C++20 Addition)std::unwrap_reference / std::unwrap_ref_decay (C++20 Addition)std::midpoint (C++20 Addition)std::lerp (C++20 Addition)std::to_address (C++20 Addition)std::assume_aligned (C++20 Addition)std::make_shared_for_overwrite / std::make_unique_for_overwrite (C++20 Addition)std::numbers::pi / std::numbers::pi_v (C++20 Addition)std::numbers::e / std::numbers::e_v (C++20 Addition)std::numbers::sqrt2 / std::numbers::sqrt3 (C++20 Addition)std::numbers::ln2 / std::numbers::ln10 (C++20 Addition)std::numbers::log2e / std::numbers::log10e (C++20 Addition)std::numbers::phi (C++20 Addition)std::numbers::inv_pi / std::numbers::inv_sqrtpi (C++20 Addition)std::numbers::egamma (C++20 Addition)Calendar Types: day, month, year, weekday, weekday_indexed, weekday_last, month_day, month_day_last, month_weekday, month_weekday_last, year_month, year_month_day, year_month_day_last, year_month_weekday, year_month_weekday_last (C++20 Addition)Time Zone Support: local_time, zoned_time, time_zone, sys_time, utc_clock, tai_clock, gps_clock, file_clock, local_days, local_seconds (C++20 Addition)std::bit_ceil (C++20 Addition)std::bit_floor (C++20 Addition)std::bit_width (C++20 Addition)std::countl_zero / std::countl_one (C++20 Addition)std::countr_zero / std::countr_one (C++20 Addition)std::has_single_bit (C++20 Addition)std::popcount (C++20 Addition)std::rotl / std::rotr (C++20 Addition)std::jthread (C++20 Addition)std::stop_token / std::stop_source (C++20 Addition)std::latch (C++20 Addition)std::barrier (C++20 Addition)std::counting_semaphore / std::binary_semaphore (C++20 Addition)std::atomic_ref (C++20 Addition)std::atomic_flag Enhancements (C++20 Evolution)std::atomic::wait / std::atomic::notify_one / std::atomic::notify_all (C++20 Addition)