Spec-Zone.ru › C++

C++17

C++17 — это крупная версия, следующая за минорной версией C++14 и вводящая новые возможности языка и библиотеки. Стандарт был опубликован в декабре 2017 года.

В C++17 были включены следующие возможности:

  • Из TS файловой системы: библиотека файловой системы.
  • Из TS Library fundamentals v1: возможности, включая std::any, std::optional, std::string_view, std::apply, полиморфные распределители памяти, поисковые объекты.
  • Из TS Library fundamentals v2: std::void_t, std::conjunction, std::disjunction, std::negation, std::not_fn, std::gcd, std::lcm.
  • Из TS Parallelism v1: возможности, включая политики выполнения, std::reduce, std::inclusive_scan, std::exclusive_scan, но с удалением exception_list.
  • Из IS математических специальных функций: математические специальные функции.
  • Из C11: std::aligned_alloc, std::timespec_get.

Устаревшие возможности

Удалённые возможности
  • std::auto_ptr,
  • устаревшие функциональные объекты,
  • std::random_shuffle,
  • std::unexpected,
  • устаревшие псевдонимы iostream,
  • триграфы,
  • ключевое слово register,
  • инкремент bool,
  • динамическая спецификация исключений
Устаревшие возможности
  • std::iterator,
  • std::raw_storage_iterator,
  • std::get_temporary_buffer,
  • std::is_literal_type,
  • std::result_of,
  • всё содержимое <codecvt>

Новые возможности языка

  • символьный литерал u8
  • noexcept стала частью системы типов
  • новые правила порядка вычисления
  • захват *this в лямбда-выражении
  • constexpr
    вычисляемый во время компиляции if constexpr
    constexpr-лямбда
  • Переменные
    встроенные переменные
    структурные привязки
    инициализаторы для if и switch
    гарантированное устранение копирования
    материализация временного объекта
  • Шаблоны
    свёрточные выражения ( ... )
    выведение аргументов шаблона класса tuple t(4, 3, 2.5)
    параметры шаблона, не являющиеся типами, объявленные с помощью auto
  • Пространства имён
    упрощённый синтаксис вложенных пространств имён
    объявление using для нескольких имён
    в пространствах имён атрибутов больше не требуется повторять имя
  • новые атрибуты:
    • [[fallthrough]]
    • [[maybe_unused]]
    • [[nodiscard]]
  • __has_include

Новые заголовки

  • <any>
  • <charconv>
  • <execution>
  • <filesystem>
  • <memory_resource>
  • <optional>
  • <string_view>
  • <variant>

Новые возможности библиотеки

Вспомогательные типы

  • std::tuple:
    • std::apply
    • std::make_from_tuple
    • направляющие вывода
  • std::any
  • std::optional
  • std::variant
  • поисковые объекты
  • std::as_const
  • std::not_fn

Управление памятью

  • алгоритмы работы с неинициализированной памятью
    • std::destroy_at
    • std::destroy
    • std::destroy_n
    • std::uninitialized_move
    • std::uninitialized_value_construct
  • weak_from_this
  • std::pmr::memory_resource и std::polymorphic_allocator
  • std::aligned_alloc
  • прозрачные std::owner_less
  • поддержка массивов для std::shared_ptr
  • функции выделения памяти с явным выравниванием

Программирование во время компиляции

  • std::byte
  • std::conjunction/std::disjunction/std::negation
  • переменные-шаблоны характеристик типов (xxx_+v)
  • std::is_swappable
  • std::is_invocable
  • std::is_aggregate
  • std::has_unique_object_representations

Алгоритмы

  • std::clamp
  • параллельные алгоритмы и политики выполнения
  • std::inclusive_scan
  • std::exclusive_scan
  • std::gcd
  • std::lcm
  • std::reduce

Итераторы и контейнеры

  • extract для map/set и merge для map/set
  • try_emplace и insert_or_assign для map/unordered_map
  • непрерывные итераторы (LegacyContiguousIterator)
  • не являющиеся членами класса std::size/std::empty/std::data

Численные операции

  • математические специальные функции
  • 3D std::hypot

Прочее

  • интерфейс размера строки кэша
  • std::launder
  • std::uncaught_exceptions
  • std::to_chars/std::from_chars
  • std::atomic<T>::is_always_lock_free
  • std::scoped_lock
  • std::timespec_get
  • функции округления для std::chrono::duration и std::chrono::time_point

Отчёты об ошибках

Исправленные в C++17 отчёты об ошибках (290 по ядру, 363 по библиотеке)
  • CWG#92
  • CWG#150
  • CWG#212
  • CWG#238
  • CWG#242
  • CWG#253
  • CWG#314
  • CWG#330
  • CWG#343
  • CWG#393
  • CWG#426
  • CWG#591
  • CWG#609
  • CWG#636
  • CWG#727
  • CWG#987
  • CWG#1021
  • CWG#1116
  • CWG#1247
  • CWG#1274
  • CWG#1284
  • CWG#1292
  • CWG#1309
  • CWG#1315
  • CWG#1338
  • CWG#1343
  • CWG#1351
  • CWG#1356
  • CWG#1391
  • CWG#1395
  • CWG#1397
  • CWG#1446
  • CWG#1465
  • CWG#1467
  • CWG#1484
  • CWG#1490
  • CWG#1492
  • CWG#1496
  • CWG#1518
  • CWG#1552
  • CWG#1558
  • CWG#1561
  • CWG#1571
  • CWG#1572
  • CWG#1573
  • CWG#1589
  • CWG#1591
  • CWG#1596
  • CWG#1600
  • CWG#1603
  • CWG#1614
  • CWG#1615
  • CWG#1622
  • CWG#1630
  • CWG#1631
  • CWG#1633
  • CWG#1638
  • CWG#1639
  • CWG#1645
  • CWG#1652
  • CWG#1653
  • CWG#1657
  • CWG#1672
  • CWG#1677
  • CWG#1683
  • CWG#1686
  • CWG#1694
  • CWG#1696
  • CWG#1705
  • CWG#1708
  • CWG#1710
  • CWG#1712
  • CWG#1715
  • CWG#1719
  • CWG#1722
  • CWG#1734
  • CWG#1736
  • CWG#1744
  • CWG#1748
  • CWG#1750
  • CWG#1751
  • CWG#1752
  • CWG#1753
  • CWG#1756
  • CWG#1757
  • CWG#1758
  • CWG#1766
  • CWG#1774
  • CWG#1776
  • CWG#1777
  • CWG#1779
  • CWG#1780
  • CWG#1782
  • CWG#1784
  • CWG#1788
  • CWG#1791
  • CWG#1793
  • CWG#1794
  • CWG#1795
  • CWG#1796
  • CWG#1797
  • CWG#1799
  • CWG#1800
  • CWG#1802
  • CWG#1804
  • CWG#1805
  • CWG#1806
  • CWG#1807
  • CWG#1809
  • CWG#1810
  • CWG#1811
  • CWG#1812
  • CWG#1813
  • CWG#1814
  • CWG#1815
  • CWG#1816
  • CWG#1819
  • CWG#1823
  • CWG#1824
  • CWG#1825
  • CWG#1830
  • CWG#1832
  • CWG#1834
  • CWG#1838
  • CWG#1843
  • CWG#1846
  • CWG#1847
  • CWG#1848
  • CWG#1850
  • CWG#1851
  • CWG#1852
  • CWG#1858
  • CWG#1860
  • CWG#1861
  • CWG#1863
  • CWG#1865
  • CWG#1866
  • CWG#1870
  • CWG#1872
  • CWG#1873
  • CWG#1874
  • CWG#1875
  • CWG#1877
  • CWG#1878
  • CWG#1881
  • CWG#1882
  • CWG#1885
  • CWG#1886
  • CWG#1887
  • CWG#1888
  • CWG#1891
  • CWG#1892
  • CWG#1895
  • CWG#1899
  • CWG#1902
  • CWG#1903
  • CWG#1909
  • CWG#1911
  • CWG#1916
  • CWG#1920
  • CWG#1922
  • CWG#1925
  • CWG#1926
  • CWG#1929
  • CWG#1930
  • CWG#1932
  • CWG#1940
  • CWG#1941
  • CWG#1942
  • CWG#1946
  • CWG#1949
  • CWG#1951
  • CWG#1952
  • CWG#1955
  • CWG#1956
  • CWG#1958
  • CWG#1959
  • CWG#1961
  • CWG#1963
  • CWG#1966
  • CWG#1967
  • CWG#1971
  • CWG#1975
  • CWG#1978
  • CWG#1981
  • CWG#1988
  • CWG#1990
  • CWG#1991
  • CWG#1992
  • CWG#1995
  • CWG#1999
  • CWG#2000
  • CWG#2001
  • CWG#2004
  • CWG#2006
  • CWG#2008
  • CWG#2010
  • CWG#2011
  • CWG#2012
  • CWG#2015
  • CWG#2016
  • CWG#2017
  • CWG#2019
  • CWG#2022
  • CWG#2024
  • CWG#2026
  • CWG#2027
  • CWG#2031
  • CWG#2032
  • CWG#2033
  • CWG#2038
  • CWG#2039
  • CWG#2040
  • CWG#2041
  • CWG#2044
  • CWG#2046
  • CWG#2047
  • CWG#2052
  • CWG#2061
  • CWG#2063
  • CWG#2064
  • CWG#2066
  • CWG#2068
  • CWG#2069
  • CWG#2071
  • CWG#2075
  • CWG#2076
  • CWG#2079
  • CWG#2082
  • CWG#2084
  • CWG#2085
  • CWG#2091
  • CWG#2093
  • CWG#2094
  • CWG#2095
  • CWG#2096
  • CWG#2098
  • CWG#2099
  • CWG#2100
  • CWG#2101
  • CWG#2104
  • CWG#2106
  • CWG#2107
  • CWG#2109
  • CWG#2113
  • CWG#2120
  • CWG#2122
  • CWG#2124
  • CWG#2129
  • CWG#2130
  • CWG#2137
  • CWG#2140
  • CWG#2141
  • CWG#2143
  • CWG#2145
  • CWG#2146
  • CWG#2147
  • CWG#2153
  • CWG#2154
  • CWG#2155
  • CWG#2156
  • CWG#2157
  • CWG#2163
  • CWG#2167
  • CWG#2171
  • CWG#2174
  • CWG#2175
  • CWG#2176
  • CWG#2180
  • CWG#2184
  • CWG#2191
  • CWG#2196
  • CWG#2198
  • CWG#2201
  • CWG#2205
  • CWG#2206
  • CWG#2211
  • CWG#2214
  • CWG#2218
  • CWG#2220
  • CWG#2224
  • CWG#2247
  • CWG#2248
  • CWG#2251
  • CWG#2259
  • CWG#2262
  • CWG#2268
  • CWG#2271
  • CWG#2272
  • CWG#2276
  • #LWG839
  • #LWG1041
  • #LWG1150
  • #LWG1169
  • #LWG1201
  • #LWG1526
  • #LWG2016
  • #LWG2051
  • #LWG2059
  • #LWG2062
  • #LWG2063
  • #LWG2072
  • #LWG2076
  • #LWG2101
  • #LWG2106
  • #LWG2108
  • #LWG2111
  • #LWG2118
  • #LWG2119
  • #LWG2127
  • #LWG2129
  • #LWG2133
  • #LWG2156
  • #LWG2160
  • #LWG2166
  • #LWG2168
  • #LWG2170
  • #LWG2179
  • #LWG2181
  • #LWG2192
  • #LWG2208
  • #LWG2212
  • #LWG2217
  • #LWG2218
  • #LWG2219
  • #LWG2221
  • #LWG2223
  • #LWG2224
  • #LWG2228
  • #LWG2230
  • #LWG2232
  • #LWG2233
  • #LWG2234
  • #LWG2239
  • #LWG2241
  • #LWG2244
  • #LWG2245
  • #LWG2250
  • #LWG2259
  • #LWG2260
  • #LWG2261
  • #LWG2266
  • #LWG2273
  • #LWG2274
  • #LWG2276
  • #LWG2294
  • #LWG2296
  • #LWG2309
  • #LWG2310
  • #LWG2312
  • #LWG2325
  • #LWG2328
  • #LWG2336
  • #LWG2340
  • #LWG2343
  • #LWG2353
  • #LWG2354
  • #LWG2361
  • #LWG2364
  • #LWG2365
  • #LWG2367
  • #LWG2368
  • #LWG2369
  • #LWG2370
  • #LWG2376
  • #LWG2377
  • #LWG2378
  • #LWG2380
  • #LWG2384
  • #LWG2385
  • #LWG2387
  • #LWG2391
  • #LWG2393
  • #LWG2394
  • #LWG2396
  • #LWG2397
  • #LWG2399
  • #LWG2400
  • #LWG2401
  • #LWG2403
  • #LWG2404
  • #LWG2406
  • #LWG2407
  • #LWG2408
  • #LWG2411
  • #LWG2415
  • #LWG2419
  • #LWG2420
  • #LWG2422
  • #LWG2424
  • #LWG2425
  • #LWG2426
  • #LWG2427
  • #LWG2428
  • #LWG2433
  • #LWG2434
  • #LWG2435
  • #LWG2436
  • #LWG2437
  • #LWG2438
  • #LWG2439
  • #LWG2440
  • #LWG2441
  • #LWG2442
  • #LWG2443
  • #LWG2445
  • #LWG2447
  • #LWG2448
  • #LWG2450
  • #LWG2454
  • #LWG2455
  • #LWG2456
  • #LWG2458
  • #LWG2459
  • #LWG2460
  • #LWG2462
  • #LWG2464
  • #LWG2465
  • #LWG2466
  • #LWG2467
  • #LWG2468
  • #LWG2469
  • #LWG2470
  • #LWG2473
  • #LWG2475
  • #LWG2476
  • #LWG2477
  • #LWG2482
  • #LWG2483
  • #LWG2484
  • #LWG2485
  • #LWG2486
  • #LWG2487
  • #LWG2488
  • #LWG2489
  • #LWG2492
  • #LWG2495
  • #LWG2501
  • #LWG2502
  • #LWG2503
  • #LWG2505
  • #LWG2510
  • #LWG2514
  • #LWG2519
  • #LWG2520
  • #LWG2523
  • #LWG2529
  • #LWG2531
  • #LWG2534
  • #LWG2536
  • #LWG2537
  • #LWG2540
  • #LWG2542
  • #LWG2543
  • #LWG2544
  • #LWG2545
  • #LWG2548
  • #LWG2549
  • #LWG2550
  • #LWG2554
  • #LWG2556
  • #LWG2557
  • #LWG2559
  • #LWG2560
  • #LWG2562
  • #LWG2565
  • #LWG2566
  • #LWG2567
  • #LWG2569
  • #LWG2571
  • #LWG2572
  • #LWG2576
  • #LWG2577
  • #LWG2578
  • #LWG2579
  • #LWG2581
  • #LWG2582
  • #LWG2583
  • #LWG2584
  • #LWG2585
  • #LWG2586
  • #LWG2587
  • #LWG2589
  • #LWG2590
  • #LWG2591
  • #LWG2596
  • #LWG2598
  • #LWG2663
  • #LWG2664
  • #LWG2665
  • #LWG2667
  • #LWG2669
  • #LWG2670
  • #LWG2671
  • #LWG2672
  • #LWG2673
  • #LWG2674
  • #LWG2676
  • #LWG2677
  • #LWG2678
  • #LWG2679
  • #LWG2680
  • #LWG2681
  • #LWG2683
  • #LWG2684
  • #LWG2685
  • #LWG2686
  • #LWG2687
  • #LWG2688
  • #LWG2689
  • #LWG2694
  • #LWG2696
  • #LWG2698
  • #LWG2699
  • #LWG2704
  • #LWG2706
  • #LWG2707
  • #LWG2709
  • #LWG2710
  • #LWG2711
  • #LWG2712
  • #LWG2715
  • #LWG2716
  • #LWG2718
  • #LWG2719
  • #LWG2720
  • #LWG2721
  • #LWG2722
  • #LWG2723
  • #LWG2724
  • #LWG2725
  • #LWG2726
  • #LWG2727
  • #LWG2728
  • #LWG2729
  • #LWG2732
  • #LWG2734
  • #LWG2735
  • #LWG2736
  • #LWG2738
  • #LWG2739
  • #LWG2740
  • #LWG2742
  • #LWG2744
  • #LWG2747
  • #LWG2748
  • #LWG2749
  • #LWG2752
  • #LWG2753
  • #LWG2754
  • #LWG2755
  • #LWG2756
  • #LWG2757
  • #LWG2758
  • #LWG2759
  • #LWG2760
  • #LWG2763
  • #LWG2765
  • #LWG2767
  • #LWG2768
  • #LWG2769
  • #LWG2770
  • #LWG2771
  • #LWG2773
  • #LWG2776
  • #LWG2777
  • #LWG2778
  • #LWG2781
  • #LWG2782
  • #LWG2784
  • #LWG2785
  • #LWG2786
  • #LWG2787
  • #LWG2788
  • #LWG2789
  • #LWG2790
  • #LWG2791
  • #LWG2793
  • #LWG2794
  • #LWG2795
  • #LWG2796
  • #LWG2798
  • #LWG2799
  • #LWG2801
  • #LWG2802
  • #LWG2803
  • #LWG2804
  • #LWG2805
  • #LWG2806
  • #LWG2807
  • #LWG2809
  • #LWG2810
  • #LWG2812
  • #LWG2817
  • #LWG2824
  • #LWG2825
  • #LWG2826
  • #LWG2830
  • #LWG2834
  • #LWG2835
  • #LWG2837
  • #LWG2838
  • #LWG2842
  • #LWG2850
  • #LWG2853
  • #LWG2855
  • #LWG2857
  • #LWG2861
  • #LWG2862
  • #LWG2863
  • #LWG2864
  • #LWG2866
  • #LWG2867
  • #LWG2868
  • #LWG2869
  • #LWG2872
  • #LWG2873
  • #LWG2874
  • #LWG2875
  • #LWG2876
  • #LWG2877
  • #LWG2878
  • #LWG2879
  • #LWG2880
  • #LWG2882
  • #LWG2887
  • #LWG2888
  • #LWG2889
  • #LWG2890
  • #LWG2895
  • #LWG2900
  • #LWG2901
  • #LWG2903
  • #LWG2904
  • #LWG2905
  • #LWG2908
  • #LWG2911
  • #LWG2912
  • #LWG2913
  • #LWG2914
  • #LWG2915
  • #LWG2917
  • #LWG2918
  • #LWG2919
  • #LWG2920
  • #LWG2921
  • #LWG2924
  • #LWG2925
  • #LWG2926
  • #LWG2927
  • #LWG2928
  • #LWG2934
  • #LWG2956

Поддержка компиляторами

Возможности основного языка C++17

Возможность C++17

Документ(ы)

GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (ранее PGI)*
Nvidia nvcc
Cray
Embarcadero C++ Builder
IBM Open XL C++ for AIX
DR11: новые правила для auto при прямой списковой инициализации N3922 5 3.8 19.0 (2015)* Да 4.10.1 17.0 17.7 11.0 11.0 10.3 17.1.0
typename в параметре-шаблоне шаблона N4051 5 3.5 19.0 (2015)* Да 4.10.1 17.0 17.7 Да* 11.0 10.3 17.1.0
Удаление триграфов N4086 5 3.5 16.0* Да 5.0 19.1 11.0 11.0 10.3 17.1.0
Определение вложенных пространств имён N4230 6 3.6 19.0 (Update 3)* Да 4.12 17.0 17.7 11.0 11.0 10.3 17.1.0
static_assert без сообщения (FTM)* N3928 6 2.5 19.10* Да 4.12 18.0 17.7 11.0 11.0 10.3 17.1.0
Атрибуты для пространств имён и перечислителей (FTM)* (FTM)* N4266 4.9 (частично)*
6
3.6 19.0 (2015)* Да 4.11 17.0 17.7 11.0 11.0 10.3 17.1.0
u8 символьные литералы N4267 6 3.6 19.0 (2015)* Да 4.11 17.0 17.7 11.0 11.0 10.3 17.1.0
Разрешение константного вычисления для всех константных аргументов шаблона (FTM)* N4268 6 3.6 19.12* Да 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0
Унарные свёрточные выражения fold и пустые наборы параметров P0036R0 6 3.9 19.12* Да 4.14 19.0 19.1 11.0 11.0 10.3 17.1.0
Удаление устаревшего использования ключевого слова register P0001R1 7 3.8 19.11* Да 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
Удаление устаревшего operator++(bool) P0002R1 7 3.8 19.11* Да 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
Включение спецификаций исключений в систему типов (FTM)* P0012R1 7 4 19.12* Да 4.14 19.0 19.1 11.0 11.0 10.3 17.1.0
__has_include в условных директивах препроцессора P0061R1 5 Да 19.11* Да 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
DR11: новая спецификация для наследуемых конструкторов (DR1941 и др.) (FTM)* P0136R1 7 3.9 19.14** Да 6.1 19.1 11.0 11.0 10.3 17.1.0
Агрегатные классы с базовыми классами (FTM)* P0017R1 7 3.9 19.14* Да 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0
Свёрточные выражения (FTM)* N4295 6 3.6 19.12* Да 4.14 19.0 18.1 11.0 11.0 10.3 17.1.0
Захват *this лямбда-выражением (FTM)* P0018R3 7 3.9 19.11* Да 4.14 19.0 18.1 11.0 11.0 10.3 17.1.0
Прямая списковая инициализация перечислений P0138R2 7 3.9 19.11* Да 4.14 18.0 19.1 11.0 11.0 10.3 17.1.0
constexpr лямбда-выражения (FTM)* P0170R1 7 5 19.11* Да 4.14 19.0 18.1 11.0 11.0 10.3 17.1.0
Различные типы начала и конца в range-based for (FTM)* P0184R0 6 3.9 19.10* Да 4.12 18.0 17.7 11.0 11.0 10.3 17.1.0
[[fallthrough]] атрибут P0188R1 7 3.9 19.10* Да 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
[[nodiscard]] атрибут P0189R1 7 3.9 19.11* Да 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
[[maybe_unused]] атрибут P0212R1 7 3.9 19.11* Да 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
Шестнадцатеричные литералы с плавающей точкой (FTM)* P0245R1 3.0 Да 19.11* Да 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
Использование пространств имён атрибутов без повторения P0028R4 7 3.9 19.11* Да 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
Динамическое выделение памяти для данных с повышенным выравниванием (FTM)* P0035R4 7 4 19.12* 10.0.0* 4.14 19.0 19.1 11.0 11.0 10.3 17.1.0
Константные параметры шаблона с типом auto (FTM)* P0127R2 7 4 19.14* Да 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0
Гарантированное устранение копирования (FTM)* P0135R1 7 4 19.13* Да 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0
Замена объектов классов, содержащих ссылочные члены P0137R1 7 6 19.14* Да 5.0 19.1 11.0 11.0 10.3 17.1.0
Более строгий порядок вычисления выражений P0145R3 7 4 19.14* Да 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0
Структурированные привязки (FTM)* P0217R3 7 4 19.11* Да 4.14 19.0 18.1 11.0* 11.0 10.3 17.1.0
Игнорирование неизвестных атрибутов P0283R2 Да 3.9 19.0 (2015)* Да 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
Операторы if constexpr (FTM)* P0292R2 7 3.9 19.11* Да 4.14 19.0 18.1 11.0 11.0 10.3 17.1.0
Инструкции инициализации для if и switch P0305R1 7 3.9 19.11* Да 4.14 18.0 18.1 11.0 11.0 10.3 17.1.0
Встроенные переменные (FTM)* P0386R2 7 3.9 19.12* Да 4.14 19.0 18.1 11.0 11.0 10.3 17.1.0
Удаление динамических спецификаций исключений P0003R5 7 4 19.12* Да 4.14 19.0 19.1 11.0 11.0 10.3 17.1.0
Расширение наборов параметров в using-объявлениях (FTM)* P0195R2 7 4 19.14* Да 5.0 19.0 19.1 11.0 11.0 10.3 17.1.0
DR98: при сопоставлении аргументов шаблона-шаблона совместимые шаблоны не исключаются (FTM)* P0522R0 7 4 19.12* Да 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0
Выведение аргументов шаблона класса (FTM)* P0091R3 7 5 19.14* Да 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0


Возможность C++17


Документ(ы)
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (ранее PGI)*
Nvidia nvcc
Cray
Embarcadero C++ Builder
IBM Open XL C++ for AIX

Возможности библиотеки C++17

Возможность C++17

Документ(ы)

GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
IBM Open XL C/C++ для AIX*
Intel Parallel STL
Embarcadero C++ Builder*
std::void_t (FTM)* N3911 6.1 3.6 19.0 (2015)* Да 17.1.0 Н/Д 10.3
std::uncaught_exceptions() (FTM)* N4259 6.1 3.7 19.0 (2015)* Да 17.1.0 Н/Д 10.3
std::size(), std::empty() и std::data() (FTM)* N4280 6 3.6 19.0 (2015)* Да 17.1.0 Н/Д 10.3
std::allocator_traits::is_always_equal, улучшения noexcept (FTM)* N4258 6.1 3.7 19.0 (2015)* 17.1.0 Н/Д
std::invoke (FTM)* N4169 6.1 3.7 19.0 (2015)* Да 17.1.0 Н/Д
std::map::try_emplace, std::map::insert_or_assign (FTM)* N4279 6.1 3.7 19.0 (2015)* Да 17.1.0 Н/Д
std::unordered_map::try_emplace, std::unordered_map::insert_or_assign (FTM)* N4279 6.1 3.7 19.0 (2015)* Да 17.1.0 Н/Д
Улучшение std::pair и std::tuple N4387 6.1 4 19.0 (Update 2)* Да 17.1.0 Н/Д 10.3
std::bool_constant (FTM)* N4389 6.1 3.7 19.0 (2015)* Да 17.1.0 Н/Д 10.3
std::shared_mutex (без таймера) (FTM)* N4508 6 3.7 19.0 (Update 2)* Да 17.1.0 Н/Д 10.3
Минимальная поддержка неполных типов для std::forward_list, std::list и std::vector (FTM)* N4510 3.0 3.6 18.0* Да 17.1.0 Н/Д
Шаблоны переменных характеристик типов (FTM)* P0006R0 7.1 3.8 19.0 (Update 2)* Да 17.1.0 Н/Д 10.3
Характеристики типов для логических операторов (FTM)* P0013R1 6.1 3.8 19.0 (Update 2)* Да 17.1.0 Н/Д 10.3
std::as_const (FTM)* P0007R1 7.1 3.8 19.0 (Update 2)* Да 17.1.0 Н/Д
Функции округления для std::chrono::duration и std::chrono::time_point (FTM)* P0092R1 7.1 3.8 19.0 (Update 2)* Да 17.1.0 Н/Д
Прозрачные std::owner_less (std::owner_less<void>) (FTM)* P0074R0 7.1 3.8 19.0 (Update 2)* Да 17.1.0 Н/Д
std::not_fn (FTM)* P0005R4
P0358R1
7.1 3.9 19.12* Да 17.1.0 Н/Д 10.3
Параллельные алгоритмы и политики выполнения (FTM)* (FTM)* P0024R2 9* 17
(частично)*
19.14* 18.0*
std::clamp() (FTM)* P0025R1 7 3.9 19.0 (Update 3)* 10.0.0* 17.1.0 Н/Д 10.3
Характеристики (не бросающих исключений) обмениваемых типов (FTM)* P0185R1 7.1* 3.9 19.0 (Update 3)* 10.0.0* 17.1.0 Н/Д 10.3
Полиморфные ресурсы памяти (FTM)* P0220R1 9.1 16 19.13* 15.0.0* 17.1.1 Н/Д 10.3
std::apply (FTM)* P0220R1 7.1 16 19.13* Да 17.1.0 Н/Д
Поисковые объекты (FTM)* P0220R1 7.1 16 19.13* Да 17.1.0 Н/Д
std::sample (FTM)* P0220R1 7.1 16 19.13* Да 17.1.0 Н/Д
Математические специальные функции (FTM)* P0226R1 7 19.14* 17.1.1 Н/Д 10.3
constexpr std::addressof (FTM)* LWG2296 7.1 Да 19.0 (Update 3)* 17.1.0 Н/Д
constexpr для std::reverse_iterator, std::move_iterator, std::array и доступа к диапазонам (FTM)* P0031R0 7.1 4 19.11* Да 17.1.0 Н/Д
constexpr std::atomic<T>::is_always_lock_free (FTM)* P0152R1 7.1 3.9 19.11* Да 17.1.0 Н/Д
std::enable_shared_from_this::weak_from_this (FTM)* P0033R1 7.1 3.9 19.12* Да 17.1.0 Н/Д
Перегрузка std::hypot с тремя аргументами (FTM)* P0030R1 7.1 3.9 19.14* Да 17.1.0 Н/Д
std::byte (FTM)* P0298R3 7 5 19.11* Да 17.1.1 Н/Д 10.3
std::string_view (FTM)* N3921
P0220R1
P0254R2
P0403R1
7.1 4 19.10* (частично)*
19.11**
10.0.0* 17.1.0 Н/Д 10.3
std::any (FTM)* P0220R1
P0032R3
7.1 4 19.10* 10.0.0* 17.1.0 Н/Д 10.3
std::optional (FTM)* P0220R1 7.1 4 19.10* 10.0.0* 17.1.0 Н/Д 10.3
Основная часть стандартной библиотеки C11 P0063R3 9.1 7 19.0 (2015)*
(частично)*
10.0.0* 17.1.1 Н/Д
Перемещение узлов Maps и Sets (FTM)* P0083R3 7 8 19.12* 10.0.0* 17.1.1 Н/Д
Тип возвращаемого значения функций emplace* некоторых контейнеров изменён с void на ссылку P0084R2 7.1 4.0 19.11* Да 17.1.0 Н/Д
std::variant (FTM)* P0088R3 7.1 4 19.10* 10.0.0* 17.1.0 Н/Д 10.3
std::make_from_tuple() (FTM)* P0209R2 7.1 3.9 19.10* Да 17.1.0 Н/Д 10.3
std::has_unique_object_representations (FTM)* P0258R2 7.1 6 19.11* Да 17.1.1 Н/Д 10.3
std::gcd() и std::lcm() (FTM)* P0295R0 7 4 19.11* Да 17.1.0 Н/Д 10.3
Проблема CWG 1776: замена объектов классов, содержащих ссылочные члены (std::launder) (FTM)* P0137R1 7.1 6 19.14* Да 17.1.0 Н/Д
Расширение инструментов управления памятью (FTM)* P0040R3 7.1 4 (частично)* 19.11* 17.1.0 Н/Д
shared_ptr::weak_type (FTM)* P0163R0 7.1 3.9 19.10* Да 17.1.0 Н/Д
Элементарные преобразования строк: std::to_chars / std::from_chars (FTM)* P0067R5 8*
11
7*
14*
20*
19.14**
19.24*
10.0.0** 17.1.1* Н/Д 10.3*
std::shared_ptr и std::weak_ptr с поддержкой массивов P0414R2 7 11 19.12* 12.0.0* 17.1.1 Н/Д 10.3
constexpr для всех функций-членов std::chrono::duration и std::chrono::time_point (FTM)* P0505R0 7.1 4 19.11* Да 17.1.1 Н/Д
std::shared_ptr<T[]> (FTM)* P0497R0 7.1 11 19.12* 17.1.1 Н/Д
constexpr std::char_traits (FTM)* P0426R1 8.1 4 19.14* Да 17.1.1 Н/Д
Библиотека файловой системы (std::filesystem) (FTM)* P0218R1
P0219R1
8 7 19.14* 11.0.0* 17.1.1 Н/Д 10.3
Размер аппаратного взаимодействия (FTM)* P0154R1 12.1 15 (частично)*
19
19.11* Н/Д 10.3
std::scoped_lock (FTM)* P0156R2 7 5 19.11* Да 17.1.1 Н/Д 10.3
std::is_aggregate (FTM)* LWG2911 7 5 19.15* Да 17.1.1 Н/Д 10.3
std::is_invocable, std::invoke_result (FTM)* P0604R0 7.1 Да 19.11* Да 17.1.1 Н/Д
DR17: std::hash<std::filesystem::path> LWG3657 11.4 17 19.32* Н/Д


Возможность C++17


Документ(ы)
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
IBM Open XL C/C++ для AIX*
Intel Parallel STL
Embarcadero C++ Builder*
Примечания
  • По состоянию на 2020-11-20 последняя версия Oracle Developer Studio — 12.6. В её документации C++17 не упоминается.
  • Компилятор Cray может поддерживать некоторые возможности начиная с версии раньше 11.0. Именно в этой версии он стал производным от Clang, получив поддержку всех языковых возможностей базового компилятора. См. документ Cray/HPE S-2179.

* — наведите курсор на ячейку, отмеченную звёздочкой *, чтобы увидеть дополнительные примечания во всплывающей подсказке.
DRnn — число nn после «DR» указывает редакцию C++, к которой применяется отчёт об ошибке, например, DR20 → C++20.

Внешние ссылки

1. C++17 — Википедия
2. Рабочие примеры C++17

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/17

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API