Modernes C++ programmieren

Okt 23, 2024

lst-0643-godb.cpp

//#(compile) c++; compiler:g132; options:-O3 -std=c++23; libs:-
// https://godbolt.org/z/W6cdra8K9 
#include <concepts>  // integral
#include <iostream>
using namespace std;
// Concept explizit mit requires
template<typename T> requires integral<T>
auto add_1(T val) { return val+1; }
// abgekürztes Concept
template<integral T>
auto add_2(T val) { return val+2; }
// abgekürztes Funktionstemplate mit Concept
auto add_3(integral auto val) { return val+3; }
// Ad-hoc-requires für Funktionstemplate
auto add_4(auto val) requires integral<decltype(val)>
{ return val+4; }
int main() {
  cout << add_1(1) << '\n';              // Ausgabe: 2
  cout << add_2(1) << '\n';              // Ausgabe: 3
  cout << add_3(1) << '\n';              // Ausgabe: 4
  cout << add_4(1) << '\n';              // Ausgabe: 5
  cout << add_3("text") << '\n';         //                                  (ERR)  Fehler
  integral auto val = add_1(99);         // auch für auto-Variablen
  cout << val << '\n';                   // Ausgabe: 100
}