fork download
  1. // Copyright 2017 <Biagio Festa>
  2. #include <iostream>
  3. #include <type_traits>
  4.  
  5. struct CriticalError : std::true_type {
  6. static constexpr bool is_critical = true;
  7. };
  8.  
  9. struct Warning : std::false_type {
  10. static constexpr bool is_critical = false;
  11. };
  12.  
  13. template<typename ErrorPolicy>
  14. void foo() {
  15. if constexpr (ErrorPolicy::is_critical) {
  16. std::cout << "Critical\n";
  17. } else {
  18. std::cout << "NotCritical\n";
  19. }
  20.  
  21. if constexpr (std::is_base_of<std::true_type, ErrorPolicy>::value) {
  22. std::cout << "Critical\n";
  23. } else {
  24. std::cout << "NotCritical\n";
  25. }
  26. // ...
  27. }
  28.  
  29. int main(int argc, char *argv[]) {
  30. foo<CriticalError>();
  31. foo<Warning>();
  32. return 0;
  33. }
  34.  
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
Critical
Critical
NotCritical
NotCritical