#include <iostream>
#include <type_traits>
#include <array>
#include <vector>
using namespace std;
template<typename T>
struct is_class_template : std::false_type { };
template<template <typename...> class T, typename... Args>
struct is_class_template<T<Args...>> : std::true_type { };
struct foo {};
int main() {
std::cout << std::boolalpha;
std::cout << is_class_template<bool>::value << std::endl; // false, correct
std::cout << is_class_template<foo>::value << std::endl; // false, correct
std::cout << is_class_template<std::vector<int>>::value << std::endl; // true, correct
std::cout << is_class_template<std::array<int, 2>>::value << std::endl; // false, NOT correct, why?
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+CiNpbmNsdWRlIDxhcnJheT4KI2luY2x1ZGUgPHZlY3Rvcj4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpzdHJ1Y3QgaXNfY2xhc3NfdGVtcGxhdGUgOiBzdGQ6OmZhbHNlX3R5cGUgeyB9OwogCnRlbXBsYXRlPHRlbXBsYXRlIDx0eXBlbmFtZS4uLj4gY2xhc3MgVCwgdHlwZW5hbWUuLi4gQXJncz4Kc3RydWN0IGlzX2NsYXNzX3RlbXBsYXRlPFQ8QXJncy4uLj4+IDogc3RkOjp0cnVlX3R5cGUgeyB9OwogCnN0cnVjdCBmb28ge307CiAKaW50IG1haW4oKSB7CiAgICBzdGQ6OmNvdXQgPDwgc3RkOjpib29sYWxwaGE7CiAgICBzdGQ6OmNvdXQgPDwgaXNfY2xhc3NfdGVtcGxhdGU8Ym9vbD46OnZhbHVlIDw8IHN0ZDo6ZW5kbDsgLy8gZmFsc2UsIGNvcnJlY3QKICAgIHN0ZDo6Y291dCA8PCBpc19jbGFzc190ZW1wbGF0ZTxmb28+Ojp2YWx1ZSA8PCBzdGQ6OmVuZGw7ICAvLyBmYWxzZSwgY29ycmVjdAogICAgc3RkOjpjb3V0IDw8IGlzX2NsYXNzX3RlbXBsYXRlPHN0ZDo6dmVjdG9yPGludD4+Ojp2YWx1ZSA8PCBzdGQ6OmVuZGw7IC8vIHRydWUsIGNvcnJlY3QKIAogICAgc3RkOjpjb3V0IDw8IGlzX2NsYXNzX3RlbXBsYXRlPHN0ZDo6YXJyYXk8aW50LCAyPj46OnZhbHVlIDw8IHN0ZDo6ZW5kbDsgLy8gZmFsc2UsIE5PVCBjb3JyZWN0LCB3aHk/CiAKICAgIHJldHVybiAwOwp9