C++20

verze standardu popisujícího programovací jazyk C++, vydaná roku 2020

C++20 je verze normy ISO/IEC 14882 programovacího jazyka C++ z roku 2020, která nahradila předchozí verzi C++17, a později byla sama nahrazena verzí C++23.[1] Technicky byla dopracována[2] skupinou WG21 na zasedání v Praze v únoru 2020,[3] její závěrečná pracovní verze byla ohlášena v březnu 2020,[4] schválena byla 4. září 2020[5][6] a publikována v prosinci 2020.[7]

Verze jazyka C++

Vlastnosti

editovat

C++20 přidává více nových velkých vlastností než C++14 nebo C++17.[8] Obsahuje mimo jiné následující změny:[9]

  • koncepty,[10] a jejich stručná syntaxe[11]
  • moduly[12]
  • pojmenované inicializátory (anglicky designated initializers)[13] (založené na vlastnosti z C99 a běžném rozšíření g++)
  • [=, this] jako lambda capture[14]
  • šablony se seznamem parametrů pro lambda funkce[15]
  • třícestné porovnání s použitím operator <=> nazývaného podle svého vzhledu „kosmická loď“
  • inicializace další proměnné ve for cyklu přes rozsah[16]
  • lambda funkce v neevaluovaných kontextech[17][18]
  • implicitní konstruovatelné a přiřaditelné bezstavové lambda funkce[17][19]
  • umožnění pack rozšíření v lambda init-capture[17][20]
  • typy třídy v netypových parametrech šablony; umožnění řetězcových literálů na místě parametrů šablon[21]
  • odstranění potřeby typename v určitých místech[22]
  • nové standardní atributy [[no_unique_address]],[23] [[likely]] a [[unlikely]][24]
  • podmíněný modifikátor explicit závislý na logickém výrazu[25]
  • rozšířené constexpr na virtuální funkce,[26] union,[27] try a catch,[28] dynamic_cast a typeid,[29] std::pointer_traits[30]
  • bezprostřední funkce používající nové klíčové slovo consteval[31]
  • celá čísla se znaménkem jsou nyní definována tak, že jsou reprezentována pomocí dvojkového doplňku (přetečení při výpočtu s celými čísly se znaménkem zůstává nedefinovaným chováním)[32]
  • upravený paměťový model[33]
  • různé vylepšení strukturovaných vazeb (interakce s lambda captures, třídy paměti static a thread_local)[34][35]
  • korutiny[36]
  • using na enum výčty s rozsahem platnosti[37]
  • klíčové slovo constinit[38]

Knihovna

editovat
  • rozsahy (podle One Ranges Proposal)[39]
  • std::make_shared a std::allocate_shared pro pole[40]
  • atomické chytré ukazatele (např. std::atomic<shared_ptr<T>> a std::atomic<weak_ptr<T>>)[41]
  • std::to_address pro konverzi ukazatelů na syrový ukazatel[42]
  • doplňky pro práci s kalendářem a časovými zónami v <chrono>[43]
  • std::span poskytující pohled na souvislá pole (podobný std::string_view s možností, aby span modifikoval referencovanou posloupnost)[44]
  • std::erase a std::erase_if pro zjednodušení rušení prvků ve většině standardních kontejnerů[45]
  • hlavičkový soubor <version>[46]
  • std::bit_cast<> pro změnu typové reprezentace objektu, méně upovídané než memcpy() a schopnější využívat vnitřní vlastnosti překladače[47]
  • makra pro testování rysů (features)[48]
  • doplnění chybějících constexpr na různých místech v knihovně[49]
  • vytváření chytrých ukazatelů s implicitní inicializací[50]
  • metoda contains pro asociativní kontejnery[51]
  • bitové operace, např. pro počet úvodních nul nebo jedniček,[52] a log2 operace[53][54][55]
  • std::bind_front[56]

Nová a změněná klíčová slova

editovat

Bylo přidáno mnoho nových klíčových slov (a nový operátor „kosmické lodi“, operator <=>), např. concept, constinit,[38] consteval, co_await, co_return, co_yield, requires (a změněn význam slova export), a char8_t (pro podporu UTF-8).[57] explicit může od C++20 používat výraz.[58] Většina použití klíčového slova volatile je nedoporučovaná.[59]

Kromě nových klíčových slov byly zavedeny identifikátory se speciálním významem, včetně import a module.

Nové atributy v C++20: [[likely]], [[unlikely]] a [[no_unique_address]][60]

Odstraněné a nedoporučované vlastnosti

editovat

Odstraněné vlastnosti:[61]

  • Hlavičkové soubory převzaté z jazyka C <ccomplex>, <ciso646>, <cstdalign>, <cstdbool> a <ctgmath> byly odstraněny, protože v C++ nemají smysl. (Odpovídající hlavičkové soubory <*.h> zůstávají pro kompatibilitu s jazykem C.)
  • Použití throw() jako specifikace výjimky bylo odstraněno.
  • Některé dříve nedoporučované vlastnosti knihovny byly odstraněny, mj. std::uncaught_exception, std::raw_storage_iterator, std::is_literal_type, std::is_literal_type_v, std::result_of a std::result_of_t.

Nedoporučované vlastnosti:

  • Použití operátoru čárka v indexových výrazech je nyní nedoporučované[62]
  • (Většina použití) volatile bylo nedoporučovaná[59]

Publikováno jako Technické specifikace (TS)

editovat
  • TS paralelismus v2[63] (včetně task bloků)
  • Reflexe TS v1[64]
  • TS sítě v1[65]

Odloženo do pozdějších verzí

editovat
  • Byla založena nová studijní skupina (SG21) pro práci na novém návrhu kontraktů[66]
  • Reflexe[67][68]
  • Metaclasses[69]
  • Exekutory[70]
  • Síťová rozšíření,[71][72] včetně asynchronních operací, základní V/V služby, časovače, buffery a proudy pracující s buffery, sokety a internetovými protokoly (blokované exekutory)
  • Vlastnosti[73]
  • Rozšířena futures[74]

Podpora překladačů

editovat

Plný podpora[75]

  • Visual Studio 2019 podporuje od verze 16.10.0 všechny vlastnosti C++20 při použití volby /std:c++latest.[76] Volba /std:c++20 povolující režim C++20 byla přidána ve verzi 16.11.0.[77][78]

Překladač Microsoftu podporuje nejen Windows, ale také Linux, Android a iOS. Pro vývoj v Linuxu však vyžaduje rozšíření „Visual C++ for Linux Development“.[79]

Částečný

  • Clang má částečnou podporu C++20, kterou lze povolit volbou -std=c++20 (od verze 10) nebo -std=c++2a (do verze 9).[80]
  • Překladač EDG začal implementovat vlastnosti C++20 ve verzi 5.0 a od verze 6.1 podporuje většinu jazykových vlastností jádra C++20.[81]
  • GCC má částečnou, experimentální podporu C++20 od roku 2017[82] ve verzi 8 volba -std=c++2a. Stejně jako Clang nahradilo GCC ve verzi 10 tuto volbu volbou -std=c++20. Existuje také volba pro povolení GNU rozšíření kromě experimentální podpory C++20, -std=gnu++20.[83]

Historie

editovat

Změny provedené v pracovní verzi C++20 v červenci 2017 (Toronto) zahrnují:[84]

  • koncepty (do normy se dostala ořezaná verze; označovaná jako „Concepts Lite“[85])
  • pojmenované inicializátory
  • [=, this] jako lambda capture
  • šablony se seznamem parametrů pro lambda funkce
  • std::make_shared a std::allocate_shared pro pole

Změny provedené v pracovní verzi C++20 na podzimním zasedání v listopadu 2017 v Albuquerque zahrnují:[86][87]

  • trojcestné porovnání pomocí operátoru „kosmické lodi“ operator <=>
  • inicializace další proměnné ve for cyklu přes rozsah
  • lambda funkce v neevaluovaných kontextech
  • implicitní konstruovatelné a přiřaditelné bezstavové lambda funkce
  • umožnění pack rozšíření v lambda init-capture
  • řetězcové literály jako parametry šablon
  • atomické chytré ukazatele (např. std::atomic<shared_ptr<T>> a std::atomic<weak_ptr<T>>)
  • std::to_address pro konvertování ukazatelů na syrový ukazatel

Změny provedené v pracovní verzi C++20 v březnu 2018 v Jacksonville zahrnují:[88]

  • odstranění potřeby typename v určitých místech
  • nové standardní atributy [[no_unique_address]], [[likely]] a [[unlikely]]
  • doplňky kalendáře a časových zón v <chrono>
  • std::span umožňuje pohledy na souvislé pole (podobně jako std::string_view ale span může referencovanou posloupnost modifikovat)
  • hlavičkový soubor <version>

Změny provedené v pracovní verzi C++20 na letním zasedání v červnu 2018 v Rapperswilu zahrnují:[89]

  • kontrakty (později odložené do pozdější verze)[90]
  • makra pro testy rysů
  • std::bit_cast<> pro změnu typové reprezentace objektu, méně upovídané než memcpy() a schopnější využívat vnitřní vlastnosti překladače
  • podmíněné explicit, umožňuje explicitní modifikátor závislý na logickém výrazu
  • constexpr virtuální funkce

Změny provedené v pracovní verzi C++20 na podzimním zasedání v listopadu 2018 (San Diego) zahrnují:[91]

  • rozsahy (The One Ranges Proposal)
  • stručná syntaxe konceptů
  • constexpr union, try a catch, dynamic_cast, typeid a std::pointer_traits.
  • přidání různých constexpr do knihovny
  • bezprostřední funkce používající nové klíčové slovo consteval
  • Celá čísla se znaménkem jsou nyní definována tak, že jsou reprezentována pomocí dvojkového doplňku (přetečení při výpočtu s celými čísly se znaménkem zůstává nedefinovaným chováním)
  • zjemnění nástrojů pro kontrakty (řízení přístupu v podmínkách kontraktu)[92] (viz seznam vlastností odložených do pozdějších verzí)
  • upravený paměťový model
  • vytvoření chytrých ukazatelů s implicitní inicializací

Změny provedené v pracovní verzi C++20 při zimním zasedání v únoru 2019 (Kona) zahrnují:[93][94][95]

  • korutiny
  • moduly
  • různá vylepšení strukturovaných vazeb (interakce s lambda captures, třídy paměti static a thread_local)

Změny provedené v pracovní verzi C++20 na letním zasedání v červenci 2019 (Kolín nad Rýnem) zahrnují:[96][97][98][99]

  • kontrakty byly odstraněny (viz seznam vlastností odložených do pozdějších verzí)[100]
  • použití operátoru čárky ve výrazech v indexu je nedoporučované[62]
  • doplňky constexpr (triviální implicitní inicializace,[101] neevaluovaná inline montáž[102])
  • using na enum výčty s rozsahem platnosti[37]
  • různé změny operátoru <=>[103][104]
  • DR: menší změny modulů[105]
  • klíčové slovo constinit
  • změny v konceptech (odstranění -> Type požadavků na návratový typ[106])
  • většina použití volatile je nedoporučovaná[59]
  • DR: [[nodiscard]] efekty na konstruktory[107]
  • Nové koncepty ve standardní knihovně nebudou používat PascalCase (ale standard_case, jako zbytek standardní knihovny)[108]
  • formátování textu (std::format, [109][110] chrono integrace,[111] oprava mezních případů v printf[112])
  • bitové operace[52]
  • constexpr INVOKE[113]
  • matematické konstanty[114]
  • doplňky konzistence k atomic (std::atomic_ref<T>,[115] std::atomic<std::shared_ptr<T>>[116])
  • do standardní knihovny přidán operátor <=>[117]
  • hlavičkové jednotky pro standardní knihovna[118]
  • synchronizační nástroje[119] (sloučeny z: Efficient atomic waiting and semaphores,[120] latches and bariers,[121] Zlepšení atomic_flag,[122] Don't Make C++ Unimplementable On Small CPUs[[123])
  • std::source_location[124]
  • constexpr kontejnery (std::string,[125] std::vector[126])
  • std::stop_token a spojování vláken (std::jthread)[127]

Změny uplatněné při řešení připomínek NB na podzimním zasedání v listopadu 2019 (Belfast) zahrnují:[128][129][130][131]

  • Typy tříd v parametrech netypové šablony (Non-Type Template Parameters, NTTP): Omezení, že není povolen žádný uživatelem definovaný operator== bylo odstraněno, protože význam rovnosti argumentů šablony byl oddělen od operator==.[132] Lze použít také pro prvky pole v NTTP typu třídy.
  • Typy s pohyblivou řádovou čárkou,[133] ukazatele a reference a sjednocení a třídy podobné sjednocení (typy tříd obsahující anonymní sjednocení) jsou nyní možné jako NTTP.
  • Identita funkcí nyní zahrnuje také koncové klauze requires (P1971)
  • Omezené funkce, které nejsou šablonami, byly odstraněny
  • <compare> je nyní dostupné v samostatné implementaci[134]
  • typedef std::span byl změněn z index_type na size_type, aby byl konzistentní se zbytkem standardní knihovny[135]
  • Konceptové rysy byly přejmenovány, aby odpovídaly přejmenování konceptů, jak bylo schváleno na zasedání v Kolíně nad Rýnem
  • Několik oprav a doplňků rozsahů (P1456R1: pohledy prouze pro přesun,[136] P1391R4: konstruktor rozsahu pro std::string_view (konstruktor z dvojice iterátorů znaků),[137] P1394R4: konstruktor rozsahu pro std::span<ref>,[138] P1870R1: forwardování rozsahu<T> je příliš křehké[139])
  • Inicializace std::atomic<T> byla změněna, aby fungovala s implicitní inicializací a seznamovou inicializací,[140] std::latch a std::barrier mohou nyní zjistit maximální počet vláken, které implementace podporuje pomocí nové členské funkce max()
  • std::weak_equality a std::strong_equality byly odstraněny, protože nejsou vůbec používány
  • Algoritmům v <numeric> bylo doplněno constexpr
  • Chybějící makra pro test rysů pro vlastnosti nové nebo změněné v C++20 byla doplněna[141]

Reference

editovat

V tomto článku byl použit překlad textu z článku C++20 na anglické Wikipedii.

  1. The Standard [online]. isocpp.org [cit. 2020-09-07]. Dostupné v archivu pořízeném z originálu dne 2020-09-19. 
  2. SUTTER, Herb. P1000R3: C++ IS schedule [online]. 2019-10-01 [cit. 2020-02-13]. Dostupné v archivu pořízeném z originálu dne 2019-11-14. 
  3. DUSÍKOVÁ, Hana. N4817: 2020 Prague Meeting Invitation and Information [online]. 2019-11-06 [cit. 2020-02-13]. Dostupné v archivu pořízeném z originálu dne 2019-12-29. 
  4. N4859 Editors' Report -- Programming Languages -- C++ [online]. [cit. 2023-09-22]. Dostupné v archivu pořízeném z originálu dne 2022-12-09. 
  5. Current Status [online]. isocpp.org [cit. 2020-09-07]. Dostupné v archivu pořízeném z originálu dne 2020-09-08. 
  6. C++20 Approved -- Herb Sutter [online]. isocpp.org [cit. 2020-09-08]. Dostupné v archivu pořízeném z originálu dne 2020-09-11. 
  7. ISO/IEC 14882:2020 [online]. [cit. 2020-12-16]. Dostupné v archivu pořízeném z originálu dne 2020-12-16. 
  8. Why does the C++ standard ship every three years? [online]. 2019-07-13 [cit. 2019-07-19]. Dostupné v archivu pořízeném z originálu dne 2019-07-13. 
  9. P0592R0: To boldly suggest an overall plan for C++20 [online]. [cit. 2017-05-06]. Dostupné v archivu pořízeném z originálu dne 2017-03-08. 
  10. P0606R0: Concepts Are Ready [online]. [cit. 2017-05-06]. Dostupné v archivu pořízeném z originálu dne 2017-03-28. 
  11. P1141R1 - Yet another approach for constrained declarations [online]. [cit. 2018-11-11]. Dostupné v archivu pořízeném z originálu dne 2018-11-11. 
  12. N4720: Working Draft, Extensions to C++ for Modules [online]. [cit. 2019-04-30]. Dostupné v archivu pořízeném z originálu dne 2019-04-30. 
  13. Tim Shen; Richard Smith. Designated Initialization Wording [online]. [cit. 2017-07-16]. Dostupné v archivu pořízeném z originálu dne 2017-10-15. 
  14. Thomas Köppe. Allow lambda capture [=, this] [online]. [cit. 2017-07-16]. Dostupné v archivu pořízeném z originálu dne 2019-02-09. 
  15. Familiar template syntax for generic lambdas [online]. [cit. 2017-07-16]. Dostupné v archivu pořízeném z originálu dne 2018-11-21. 
  16. Range-based for statements with initializer [online]. [cit. 2019-10-30]. Dostupné v archivu pořízeném z originálu dne 2017-04-06. 
  17. a b c Trip Report: C++ Standards Meeting in Albuquerque, November 2017. botondballo.wordpress.com. 2017-11-20. Dostupné v archivu pořízeném z originálu dne 2017-12-11. (anglicky) 
  18. Wording for lambdas in unevaluated contexts [online]. [cit. 2017-12-11]. Dostupné v archivu pořízeném z originálu dne 2017-12-12. 
  19. Default constructible and assignable stateless lambdas [online]. [cit. 2017-12-11]. Dostupné v archivu pořízeném z originálu dne 2017-12-12. 
  20. Pack expansion in lambda init-capture [online]. www.open-std.org [cit. 2017-12-11]. Dostupné v archivu pořízeném z originálu dne 2020-02-14. 
  21. Class Types in Non-Type Template Parameters [online]. www.open-std.org, 2018-06-06 [cit. 2022-02-18]. Dostupné v archivu pořízeném z originálu dne 2022-02-05. 
  22. Nina Ranns; Daveed Vandevoorde. Down with typename! [online]. [cit. 2019-05-18]. Dostupné v archivu pořízeném z originálu dne 2018-04-22. 
  23. Language support for empty objects [online]. [cit. 2019-08-04]. Dostupné v archivu pořízeném z originálu dne 2018-04-17. 
  24. Proposed wording for likely and unlikely attributes (Revision 5) [online]. [cit. 2019-05-18]. Dostupné v archivu pořízeném z originálu dne 2018-05-13. 
  25. explicit(bool) [online]. www.open-std.org [cit. 2018-11-13]. Dostupné v archivu pořízeném z originálu dne 2018-07-20. 
  26. Allowing Virtual Function Calls in Constant Expressions [online]. www.open-std.org [cit. 2019-03-11]. Dostupné v archivu pořízeném z originálu dne 2018-06-11. 
  27. P1330R0 - Changing the active member of a union inside constexpr [online]. [cit. 2019-07-26]. Dostupné v archivu pořízeném z originálu dne 2019-07-26. 
  28. P1002R0 - Try-catch blocks in constexpr functions [online]. [cit. 2018-11-11]. Dostupné v archivu pořízeném z originálu dne 2018-11-11. 
  29. P1327R0 - Allowing dynamic_cast, polymorphic typeid in Constant Expressions [online]. [cit. 2019-07-26]. Dostupné v archivu pořízeném z originálu dne 2019-07-26. 
  30. P1006R1 - Constexpr in std::pointer_traits [online]. [cit. 2018-11-11]. Dostupné v archivu pořízeném z originálu dne 2018-11-11. 
  31. P1073R2 - Immediate functions [online]. [cit. 2018-11-11]. Dostupné v archivu pořízeném z originálu dne 2018-10-26. 
  32. P1236R0: Alternative Wording for P0907R4 Signed Integers are Two's Complement [online]. [cit. 2018-11-11]. Dostupné v archivu pořízeném z originálu dne 2018-11-11. 
  33. P0668R4: Revising the C++ memory model [online]. [cit. 2018-11-11]. Dostupné v archivu pořízeném z originálu dne 2018-11-11. 
  34. P1091R1: Extending structured bindings to be more like variable declarations [online]. www.open-std.org [cit. 2019-02-24]. Dostupné v archivu pořízeném z originálu dne 2019-01-26. 
  35. P1091R2: Extending structured bindings to be more like variable declarations [online]. www.open-std.org [cit. 2019-02-24]. Dostupné v archivu pořízeném z originálu dne 2019-01-26. 
  36. N4649: Working Draft, Technical Specification for C++ Extensions for Coroutines [online]. [cit. 2017-05-06]. Dostupné v archivu pořízeném z originálu dne 2017-05-16. 
  37. a b P1099R5: Using Enum [online]. www.open-std.org, 2019-07-20 [cit. 2019-07-20]. Dostupné v archivu pořízeném z originálu dne 2019-08-20. 
  38. a b P1143R2: Adding the constinit keyword [online]. www.open-std.org, 2019-07-20 [cit. 2019-07-20]. Dostupné v archivu pořízeném z originálu dne 2019-08-20. 
  39. P0896R3 [online]. [cit. 2018-11-11]. Dostupné v archivu pořízeném z originálu dne 2018-11-11. 
  40. Extending make_shared to Support Arrays [online]. [cit. 2020-02-12]. Dostupné v archivu pořízeném z originálu dne 2017-09-06. 
  41. MEREDITH, Alisdair; SUTTER, Herb. Revising atomic_shared_ptr for C++20 [online]. ISO [cit. 2018-12-27]. Dostupné v archivu pořízeném z originálu dne 2018-01-04. 
  42. Utility to convert a pointer to a raw pointer [online]. [cit. 2020-02-12]. Dostupné v archivu pořízeném z originálu dne 2018-02-20. 
  43. Howard E. Hinnant; Tomasz Kamiński. Extending<chrono>to Calendars and Time Zones [online]. [cit. 2019-05-18]. Dostupné v archivu pořízeném z originálu dne 2018-05-13. 
  44. Neil MacIntosh; Stephan T. Lavavej. span: bounds-safe views for sequences of objects [online]. [cit. 2019-05-18]. Dostupné v archivu pořízeném z originálu dne 2019-05-18. 
  45. Alisdair Meredith; Stephan T. Lavavej. Adopt Consistent Container Erasure from Library Fundamentals 2 for C++20 [online]. 2018-10-04 [cit. 2020-12-14]. Dostupné v archivu pořízeném z originálu dne 2021-03-08. 
  46. Alan Talbot. <version> [online]. [cit. 2019-05-18]. Dostupné v archivu pořízeném z originálu dne 2019-05-18. 
  47. Bit-casting object representations [online]. www.open-std.org [cit. 2018-11-10]. Dostupné v archivu pořízeném z originálu dne 2018-08-18. 
  48. Integrating feature-test macros into the C++ WD (rev. 2) [online]. www.open-std.org [cit. 2018-11-10]. Dostupné v archivu pořízeném z originálu dne 2018-07-20. 
  49. P1032R1 - Misc constexpr bits [online]. [cit. 2018-11-11]. Dostupné v archivu pořízeném z originálu dne 2018-10-26. 
  50. Smart pointer creation with default initialization [online]. [cit. 2020-02-12]. Dostupné v archivu pořízeném z originálu dne 2019-01-26. 
  51. Mikhail Maltsev. P0458R2: Checking for Existence of an Element in Associative Containers [online]. [cit. 2022-01-02]. Dostupné v archivu pořízeném z originálu dne 2022-01-16. 
  52. a b P0553R4: Bit operations [online]. www.open-std.org, 2019-07-20 [cit. 2019-07-20]. Dostupné v archivu pořízeném z originálu dne 2019-07-20. 
  53. P0556R3: Integral power-of-2 operations [online]. www.open-std.org, 2018-06-06 [cit. 2020-08-08]. Dostupné v archivu pořízeném z originálu dne 2019-06-26. 
  54. P1355R2 Exposing a narrow contract for ceil2 [online]. www.open-std.org, 2019-06-11 [cit. 2020-08-08]. Dostupné v archivu pořízeném z originálu dne 2019-08-05. 
  55. On the names of low-level bit manipulation functions [online]. www.open-std.org, 2020-02-11 [cit. 2020-08-08]. Dostupné v archivu pořízeném z originálu dne 2020-03-24. 
  56. Tomasz Kamiński. Simplified partial function application [online]. 2017-11-09 [cit. 2020-11-08]. Dostupné v archivu pořízeném z originálu dne 2020-09-28. 
  57. C++ keywords - cppreference.com [online]. en.cppreference.com [cit. 2019-08-04]. Dostupné v archivu pořízeném z originálu dne 2012-03-19. 
  58. explicit specifier - cppreference.com [online]. en.cppreference.com [cit. 2019-08-04]. Dostupné v archivu pořízeném z originálu dne 2012-02-21. 
  59. a b c P1152R4: Deprecating volatile [online]. www.open-std.org, 2019-07-20 [cit. 2019-07-20]. Dostupné v archivu pořízeném z originálu dne 2019-06-23. 
  60. attribute specifier sequence(since C++11) - cppreference.com [online]. en.cppreference.com [cit. 2019-08-04]. Dostupné v archivu pořízeném z originálu dne 2012-07-05. 
  61. Working Draft, Standard for Programming Language C++ (Annex C, §C.1) [online]. [cit. 2020-11-18]. Dostupné v archivu pořízeném z originálu dne 2020-04-27. 
  62. a b P1161R2: Deprecate uses of the comma operator in subscripting expressions [online]. www.open-std.org [cit. 2019-07-20]. Dostupné v archivu pořízeném z originálu dne 2019-07-20. 
  63. C++ Extensions for Parallelism Version 2 [online]. [cit. 2019-07-09]. Dostupné v archivu pořízeném z originálu dne 2022-09-21. 
  64. C++ Extensions for Reflection [online]. [cit. 2019-07-09]. Dostupné v archivu pořízeném z originálu dne 2022-09-21. 
  65. C++ Extensions for Networking [online]. [cit. 2019-07-09]. Dostupné v archivu pořízeném z originálu dne 2022-09-21. 
  66. SUTTER, Herb. Trip report: Summer ISO C++ standards meeting (Cologne) [online]. Sutter's Mill, 2019-07-20 [cit. 2019-07-21]. Dostupné v archivu pořízeném z originálu dne 2020-04-17. (anglicky) 
  67. Reflections on the reflection proposals - Meeting C++ [online]. meetingcpp.com [cit. 2017-06-30]. Dostupné v archivu pořízeném z originálu dne 2017-06-23. (anglicky) 
  68. Static reflection [online]. www.open-std.org [cit. 2018-11-10]. Dostupné v archivu pořízeném z originálu dne 2020-02-22. 
  69. Herb Sutter. Metaclasses [online]. [cit. 2017-07-23]. Dostupné v archivu pořízeném z originálu dne 2020-11-11. 
  70. A Unified Executors Proposal for C++ [online]. www.open-std.org [cit. 2019-02-24]. Dostupné v archivu pořízeném z originálu dne 2020-02-20. 
  71. N4771: Working Draft, C++ Extensions for Networking [online]. [cit. 2019-03-23]. Dostupné v archivu pořízeném z originálu dne 2020-04-19. 
  72. ISO/IEC TS 19216:2018 Programming Languages -- C++ Extensions for Networking [online]. [cit. 2018-12-17]. Dostupné v archivu pořízeném z originálu dne 2019-01-15. 
  73. A General Property Customization Mechanism [online]. www.open-std.org [cit. 2019-02-24]. Dostupné v archivu pořízeném z originálu dne 2020-01-19. 
  74. A Unified Futures Proposal for C++ [online]. [cit. 2019-07-08]. Dostupné v archivu pořízeném z originálu dne 2022-09-21. 
  75. C++ compiler support - cppreference.com [online]. en.cppreference.com [cit. 2022-08-12]. Dostupné v archivu pořízeném z originálu dne 2022-08-08. 
  76. JAWIDDIS. Visual Studio 2019 version 16.10 Release Notes [online]. docs.microsoft.com [cit. 2021-07-13]. Dostupné v archivu pořízeném z originálu dne 2021-08-11. (anglicky) 
  77. MSVC C++20 and the /std:c++20 Switch [online]. docs.microsoft.com, 2021-09-02 [cit. 2021-09-07]. Dostupné v archivu pořízeném z originálu dne 2021-09-06. (anglicky) 
  78. Visual Studio documentation for Microsoft C++. [s.l.]: Microsoft Docs, 2022-04-19. Dostupné v archivu pořízeném z originálu dne 2022-04-19. 
  79. Visual Studio 2019 Compatibility [online]. docs.microsoft.com [cit. 2022-08-12]. Dostupné v archivu pořízeném z originálu dne 2020-06-03. (anglicky) 
  80. Clang - C++ Programming Language Status [online]. clang.llvm.org [cit. 2022-04-19]. Dostupné v archivu pořízeném z originálu dne 2013-07-04. 
  81. C++ compiler support - cppreference.com [online]. en.cppreference.com [cit. 2020-10-10]. Dostupné v archivu pořízeném z originálu dne 2020-10-03. 
  82. Andrew Sutton - [PATCH] Add -std=c++2a [online]. gcc.gnu.org [cit. 2022-04-19]. Dostupné v archivu pořízeném z originálu dne 2021-03-01. 
  83. C++ Standards Support in GCC - GNU Project [online]. gcc.gnu.org [cit. 2022-04-19]. Dostupné v archivu pořízeném z originálu dne 2022-04-20. 
  84. Herb Sutter. Trip report: Summer ISO C++ standards meeting (Toronto) [online]. 2017-07-15 [cit. 2017-07-16]. Dostupné v archivu pořízeném z originálu dne 2017-08-06. 
  85. Andrew Sutton; Bjarne Stroustrup. Concepts Lite: Constraining Templates with Predicates [online]. isocpp.org, 2013-02-24 [cit. 2021-01-13]. Dostupné v archivu pořízeném z originálu dne 2021-01-16. 
  86. Herb Sutter. Trip report: Fall ISO C++ standards meeting (Albuquerque) [online]. 2017-11-11 [cit. 2017-12-04]. Dostupné v archivu pořízeném z originálu dne 2019-02-13. 
  87. SMITH, Richard; PERCHIK, Dawn; KÖPPE, Thomas. N4714 Editors' Report -- Programming Languages -- C++ [online]. GitHub [cit. 2018-12-27]. Dostupné v archivu pořízeném z originálu dne 2022-09-21. 
  88. Botond Ballo. Trip Report: C++ Standards Meeting in Jacksonville, March 2018 [online]. 2018-03-28 [cit. 2019-05-18]. Dostupné v archivu pořízeném z originálu dne 2019-05-18. 
  89. Herb Sutter. Trip report: Summer ISO C++ standards meeting (Rapperswil) [online]. 2018-07-02 [cit. 2018-11-10]. Dostupné v archivu pořízeném z originálu dne 2020-05-23. 
  90. Support for contract based programming in C++ [online]. www.open-std.org [cit. 2018-11-10]. Dostupné v archivu pořízeném z originálu dne 2020-01-15. 
  91. fall meeting in November 2018
  92. P1289R0 - Access control in contract conditions [online]. [cit. 2018-11-11]. Dostupné v archivu pořízeném z originálu dne 2018-11-11. 
  93. winter meeting in February 2019
  94. r/cpp - 2019-02 Kona ISO C++ Committee Trip Report (C++20 design is complete; Modules in C++20; Coroutines in C++20; Reflection TS v1 published; work begins on a C++ Ecosystem Technical Report) [online]. reddit, 2019-02-23 [cit. 2019-02-24]. Dostupné v archivu pořízeném z originálu dne 2019-02-23. (anglicky) 
  95. Trip report: Winter ISO C++ standards meeting (Kona) [online]. Sutter's Mill, 2019-02-23 [cit. 2019-02-24]. Dostupné v archivu pořízeném z originálu dne 2019-02-24. (anglicky) 
  96. 2019 Cologne Meeting Invitation and Information [online]. Dostupné online. 
  97. r/cpp - 2019-07 Cologne ISO C++ Committee Trip Report — 🚀 The C++20 Eagle has Landed 🚀 (C++20 Committee Draft shipped; Contracts Moved From C++20 to a Study Group; 'std::format' in C++20; C++20 Synchronization Library) [online]. reddit, 2019-07-20 [cit. 2019-09-15]. Dostupné v archivu pořízeném z originálu dne 2020-04-20. (anglicky) 
  98. Botond Ballo. Trip Report: C++ Standards Meeting in Cologne, July 2019 [online]. 2019-07-26 [cit. 2019-08-05]. Dostupné v archivu pořízeném z originálu dne 2020-02-26. 
  99. SUTTER, Herb. Trip report: Summer ISO C++ standards meeting (Cologne) [online]. 2019-07-20 [cit. 2019-07-21]. Dostupné v archivu pořízeném z originálu dne 2020-04-17. 
  100. JOSUTTIS, Nicolai. P1823R0: Remove Contracts from C++20 [online]. [cit. 2019-08-20]. Dostupné v archivu pořízeném z originálu dne 2020-08-13. 
  101. Permitting trivial default initialization in constexpr contexts [online]. [cit. 2019-07-20]. Dostupné v archivu pořízeném z originálu dne 2020-10-19. 
  102. P1668R1: Enabling Constexpr Intrinsics By Permitting Unevaluated inline-asm in Constexpr Functions [online]. www.open-std.org [cit. 2019-07-20]. Dostupné v archivu pořízeném z originálu dne 2020-01-19. 
  103. P1186R3: When do you actually use <=>? [online]. www.open-std.org, 2019-07-20 [cit. 2019-07-20]. Dostupné v archivu pořízeném z originálu dne 2019-08-20. 
  104. P1630R1: Spaceship needs a tune-up [online]. www.open-std.org, 2019-07-20 [cit. 2019-07-20]. Dostupné v archivu pořízeném z originálu dne 2019-08-20. 
  105. P1766R1: Mitigating minor modules maladies [online]. www.open-std.org, 2019-07-20 [cit. 2019-07-20]. Dostupné v archivu pořízeném z originálu dne 2019-08-20. 
  106. P1452R2: On the non-uniform semantics of return-type-requirements [online]. www.open-std.org, 2019-07-20 [cit. 2019-07-20]. Dostupné v archivu pořízeném z originálu dne 2019-08-20. 
  107. P1771R1: nodiscard for constructors [online]. www.open-std.org, 2019-07-20 [cit. 2019-07-20]. Dostupné v archivu pořízeném z originálu dne 2022-09-21. 
  108. P1754R1: Rename concepts to standard_case for C++20, while we still can [online]. www.open-std.org, 2019-07-20 [cit. 2019-07-20]. Dostupné v archivu pořízeném z originálu dne 2019-08-20. 
  109. P0645R10: Text Formatting [online]. www.open-std.org, 2019-07-20 [cit. 2019-07-20]. Dostupné v archivu pořízeném z originálu dne 2019-08-20. 
  110. std::format in C++20 [online]. www.zverovich.net, 2019-07-23 [cit. 2019-09-15]. Dostupné v archivu pořízeném z originálu dne 2019-07-23. 
  111. P1361R2: Integration of chrono with text formatting [online]. www.open-std.org, 2019-07-20 [cit. 2019-07-20]. Dostupné v archivu pořízeném z originálu dne 2019-08-20. 
  112. P1652R1: Printf corner cases in std::format [online]. www.open-std.org, 2019-07-20 [cit. 2019-07-20]. Dostupné v archivu pořízeném z originálu dne 2019-08-20. 
  113. P1965R2: constexpr INVOKE [online]. www.open-std.org, 2019-07-20 [cit. 2019-07-20]. Dostupné v archivu pořízeném z originálu dne 2019-08-20. 
  114. P0631R8: Math Constants [online]. www.open-std.org, 2019-07-20 [cit. 2019-07-20]. Dostupné v archivu pořízeném z originálu dne 2019-08-20. 
  115. P1643R1: Add wait/notify to atomic_ref<T> [online]. www.open-std.org, 2019-07-20 [cit. 2019-07-20]. Dostupné v archivu pořízeném z originálu dne 2019-08-20. 
  116. P1664R0: Add wait/notify to atomic<shared_ptr<T>> [online]. www.open-std.org, 2019-07-20 [cit. 2019-07-20]. Dostupné v archivu pořízeném z originálu dne 2021-11-05. 
  117. P1614R2: The Mothership has Landed - Adding <=> to the Library [online]. www.open-std.org, 2019-07-20 [cit. 2019-07-20]. Dostupné v archivu pořízeném z originálu dne 2019-08-20. 
  118. P1502R1: Standard library header units for C++20 [online]. www.open-std.org, 2019-07-20 [cit. 2019-07-20]. Dostupné v archivu pořízeném z originálu dne 2019-08-20. 
  119. P1135R6: The C++20 Synchronization Library [online]. www.open-std.org, 2019-07-20 [cit. 2019-07-20]. Dostupné v archivu pořízeném z originálu dne 2019-08-20. 
  120. P0514R4: Efficient concurrent waiting for C++20 [online]. [cit. 2019-07-20]. Dostupné v archivu pořízeném z originálu dne 2018-08-18. 
  121. P0666R2: Revised Latches and Barriers for C++20 [online]. [cit. 2019-07-20]. Dostupné v archivu pořízeném z originálu dne 2018-08-18. 
  122. P0995R1: Improving atomic_flag [online]. [cit. 2019-07-20]. Dostupné v archivu pořízeném z originálu dne 2019-07-20. 
  123. P1285R0: Don't Make C++ Unimplementable On Small CPUs [online]. [cit. 2019-07-20]. Dostupné v archivu pořízeném z originálu dne 2019-07-15. 
  124. P1208R6: Adopt source_location from Library Fundamentals V3 for C++20 [online]. [cit. 2019-08-20]. Dostupné v archivu pořízeném z originálu dne 2019-08-20. 
  125. P0980R1: Making std::string constexpr [online]. [cit. 2020-07-30]. Dostupné v archivu pořízeném z originálu dne 2020-09-29. 
  126. P1004R2: Making std::vector constexpr [online]. [cit. 2020-07-30]. Dostupné v archivu pořízeném z originálu dne 2020-09-28. 
  127. P0660R10: Stop Token and Joining Thread [online]. [cit. 2019-08-20]. Dostupné v archivu pořízeném z originálu dne 2019-08-20. 
  128. fall meeting in November 2019
  129. r/cpp - 2019-11 Belfast ISO C++ Committee Trip Report — Started Processing Feedback on the C++20 Committee Draft; ABI Review Group Formed [online]. reddit, 2019-11-09 [cit. 2019-11-09]. Dostupné v archivu pořízeném z originálu dne 2019-11-09. (anglicky) 
  130. SUTTER, Herb. Trip report: Autumn ISO C++ standards meeting (Belfast) [online]. Sutter's Mill, 2019-11-09 [cit. 2019-11-09]. Dostupné v archivu pořízeném z originálu dne 2019-11-09. (anglicky) 
  131. BOTONDBALLO. Trip Report: C++ Standards Meeting in Belfast, November 2019 [online]. There's Waldo!, 2019-11-15 [cit. 2019-11-24]. Dostupné v archivu pořízeném z originálu dne 2019-11-20. (anglicky) 
  132. P1907R0: Inconsistencies with non-type template parameters [online]. www.open-std.org, 2019-10-07 [cit. 2019-11-09]. Dostupné v archivu pořízeném z originálu dne 2019-11-09. 
  133. P1714: NTTP are incomplete without float, double, and long double! (Revision 1) [online]. www.open-std.org, 2019-07-19 [cit. 2019-11-09]. Dostupné v archivu pořízeném z originálu dne 2019-11-09. 
  134. P1855R=: Make<compare>freestanding [online]. www.open-std.org, 2019-10-05 [cit. 2019-11-09]. Dostupné v archivu pořízeném z originálu dne 2019-11-09. 
  135. P1872R0: span should have size_type not index_type [online]. www.open-std.org, 2019-09-16 [cit. 2019-11-09]. Dostupné v archivu pořízeném z originálu dne 2019-11-09. 
  136. P1456: Move-only views [online]. www.open-std.org, 2019-01-25 [cit. 2019-11-09]. Dostupné v archivu pořízeném z originálu dne 2019-11-09. 
  137. P1391: Range constructor for std::string_view [online]. www.open-std.org [cit. 2019-11-09]. Dostupné v archivu pořízeném z originálu dne 2020-01-04. 
  138. P1394: Range constructor for std::span [online]. www.open-std.org, 2019-08-02 [cit. 2019-11-09]. Dostupné v archivu pořízeném z originálu dne 2019-11-09. 
  139. P1870R1: forwarding-range<T> is too subtle [online]. www.open-std.org, 2019-10-06 [cit. 2019-11-09]. Dostupné v archivu pořízeném z originálu dne 2019-11-09. 
  140. P0883: Fixing Atomic Initialization [online]. www.open-std.org, 2018-06-05 [cit. 2019-11-09]. Dostupné v archivu pořízeném z originálu dne 2019-11-09. 
  141. Missing feature-test macros 2018-2019 [online]. www.open-std.org, 2019-10-06 [cit. 2019-11-09]. Dostupné v archivu pořízeném z originálu dne 2019-11-09. 

Externí odkazy

editovat