fork download
  1. #include <iostream>
  2. #include <type_traits>
  3. #include <array>
  4. #include <vector>
  5. using namespace std;
  6.  
  7. template<typename T>
  8. struct is_class_template : std::false_type { };
  9.  
  10. template<template <typename...> class T, typename... Args>
  11. struct is_class_template<T<Args...>> : std::true_type { };
  12.  
  13. struct foo {};
  14.  
  15. int main() {
  16. std::cout << std::boolalpha;
  17. std::cout << is_class_template<bool>::value << std::endl; // false, correct
  18. std::cout << is_class_template<foo>::value << std::endl; // false, correct
  19. std::cout << is_class_template<std::vector<int>>::value << std::endl; // true, correct
  20.  
  21. std::cout << is_class_template<std::array<int, 2>>::value << std::endl; // false, NOT correct, why?
  22.  
  23. return 0;
  24. }
Success #stdin #stdout 0s 3456KB
stdin
Standard input is empty
stdout
false
false
true
false