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

  • if constexpr()
  • constexpr Lambdas
  • Standard Attribute
  • Structured Binding
  • Initialization in if and switch Instructions
  • Inline Variables
  • Template Argument Deduction
  • Deduction Guides
  • Folding Expressions
  • The types std::optional, std::any and std::variant
  • The Library for Data Systems
  • Parallel Algorithms
  • std::shared_mutex

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 26.04.2021