fork download
  1. #include <iostream>
  2. #include <type_traits>
  3.  
  4. using namespace std;
  5.  
  6. struct Logger
  7. {
  8. // template<typename Type>
  9. // using IsRawString =
  10. // std::integral_constant<bool, std::is_same<const char*, Type>::value || std::is_same<char*, Type>::value>;
  11.  
  12. template<typename Type>
  13. static constexpr bool IsRawString()
  14. {
  15. return std::is_same<const char*, Type>::value || std::is_same<char*, Type>::value;
  16. }
  17.  
  18. template<typename Type, typename Enable = void> struct Traits;
  19.  
  20. template<typename Type>
  21. struct Traits<Type, std::enable_if_t<!IsRawString<Type>() && !std::is_pointer<Type>::value>>
  22. {
  23. static const int Index = 1;
  24. };
  25.  
  26. template<typename Type>
  27. struct Traits<Type, std::enable_if_t<IsRawString<Type>()>>
  28. {
  29. static const int Index = 2;
  30. };
  31.  
  32. template<typename Type>
  33. struct Traits<Type, std::enable_if_t<std::is_pointer<Type>::value && !IsRawString<Type>()>>
  34. {
  35. static const int Index = 3;
  36. };
  37.  
  38. };
  39.  
  40. int main()
  41. {
  42. cout << Logger::Traits<int>::Index << endl
  43. << Logger::Traits<char*>::Index << endl
  44. << Logger::Traits<const char*>::Index << endl
  45. << Logger::Traits<void*>::Index << endl;
  46.  
  47.  
  48. return 0;
  49. }
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
1
2
2
3