The C++17 Seminar

Based on a substantial understanding of C++, this course presents the standard of this programming language ISO/IEC 14882:2017 (more simply known as ISO C++17 or C++17). In this context, the changes in the new standards compared to the old ones ISO C++98 and ISO C++11 are addressed. The innovations are depicted and practiced during the seminar using operational examples.

The following subject matters are covered:

  • New Keywords for Handling Types and Declarations:
    • auto
    • decltype
    • using
  • Alignment
    • alignas
    • alignof
  • The keyword nullptr
  • New Types
  • Strongly typed Enums
  • Scoped Enums
  • Unrestricted Unions
  • Constant Expressions
  • The New Keyword constexpr
  • Unicode Support
  • Unicode Types
  • Prefixes
  • String Literals
  • New Keywords for Class Design
    • override For Controlled Overwriting of Methods
    • final For Finalizing Methods and Classes
  • Constructor Inheritance
  • Constructor Delegation
  • New Initialization Syntax
  • Initialization Sequences
    • The std::initializer_list<T> Container
    • Constructors with Value Lists
  • The R-Value Reference
  • The Move Constructor
  • Copyability and Movability of Objects
  • The Use of std::move()
  • The application of std::forward<T>() in Templates
  • Type Traits
  • static_assert
  • The New Possibilities of the Directive using
  • Template Aliases
  • Namespace Association
  • Lambdas
  • Subsequent Definition of Return Types
  • Referencing Lambda Call Contexts
  • Copying Lambda Call Contexts
  • Variadic Templates
  • The Thread Support of the Standard Library
  • The Basic Mechanisms of Threading
  • Mutexes
  • Synchronizing and Condition Variables
  • Atomic Operations
  • Atomic Types
  • Thread Local Storage
  • Threading with Lambdas (closures)
  • Futures
  • Smart Pointers
    • std::unique_ptr<T>
    • std::shared_ptr<T>
    • std::weak_ptr<T>
  • New Containers
    • std::forward_list<T>
    • std::unordered_set<T>
    • std::unordered_map<T>
  • Regular Expressions
  • Generic Lambda Expressions
  • Deduction of the Function Return Type
  • Binary Literals
  • Number Group Separator in Literals
  • The deprecated Attribute
  • More Complex constexpr Functions
  • Variable Templates

Complements with C++17

  • Declarations in if and switch Clauses
  • Inline Variables
  • Compile time decisions with if constexpr()
  • constexpr Lambdas
  • Structured Binding and Decomposing
  • Standard Attributes
  • Fold Expressions
  • Template Argument Deduction for Classen Templates
  • Deduction Guides
  • Non Type Template Parameters with auto
  • Initializing Parent Classes over the Uniform Initialization
  • The Short Form of static_assert()
  • The Wrapper Types:
    • std::optional
    • std::any
    • std::variant
  • std::shared_mutex
  • std::byte
  • The File System Library
  • The Extension of the Type Traits Library
  • Parallel Algorithms

The seminar introduces the new standard through theory and practice. After the theoretical parts, practical exercises are being introduced so that the applicability of the new language and library elements can be tested by the participant.

The current versions of regular productive compilers usually support the C++17 standards. The best support is delivered by Clang C++ compiler closely followed by the GNU C++ compiler. The operating system used in the seminar is irrelevant. Usually it is Linux, Windows or Mac OS X. Any other UNIX Systems can also be adopted.

Last modified 10.07.2021