#include <iostream>
#include <type_traits>
#include <vector>
#include <string>
#include <array>
using namespace std;
template<typename T>
struct is_template : std::false_type
{
};
template<template <typename... > class T, typename...Args>
struct is_template<T<Args...>> : std::true_type
{
};
int main() {
static_assert(is_template<std::vector<int>>::value == true, "correct");
static_assert(is_template<int>::value == false, "correct");
static_assert(is_template<std::string>::value == true, "correct");
static_assert(is_template<std::array<int, 2>>::value == true, "correct"); // WRONG COMPILE ERROR
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDxhcnJheT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpzdHJ1Y3QgaXNfdGVtcGxhdGUgOiBzdGQ6OmZhbHNlX3R5cGUKewp9OwogCnRlbXBsYXRlPHRlbXBsYXRlIDx0eXBlbmFtZS4uLiA+IGNsYXNzIFQsIHR5cGVuYW1lLi4uQXJncz4Kc3RydWN0IGlzX3RlbXBsYXRlPFQ8QXJncy4uLj4+IDogc3RkOjp0cnVlX3R5cGUKewp9OwogCmludCBtYWluKCkgewoJc3RhdGljX2Fzc2VydChpc190ZW1wbGF0ZTxzdGQ6OnZlY3RvcjxpbnQ+Pjo6dmFsdWUgPT0gdHJ1ZSwgImNvcnJlY3QiKTsKCXN0YXRpY19hc3NlcnQoaXNfdGVtcGxhdGU8aW50Pjo6dmFsdWUgPT0gZmFsc2UsICJjb3JyZWN0Iik7CiAKCXN0YXRpY19hc3NlcnQoaXNfdGVtcGxhdGU8c3RkOjpzdHJpbmc+Ojp2YWx1ZSA9PSB0cnVlLCAiY29ycmVjdCIpOwoJc3RhdGljX2Fzc2VydChpc190ZW1wbGF0ZTxzdGQ6OmFycmF5PGludCwgMj4+Ojp2YWx1ZSA9PSB0cnVlLCAiY29ycmVjdCIpOyAvLyBXUk9ORyBDT01QSUxFIEVSUk9SCglyZXR1cm4gMDsKfQ==
prog.cpp: In function ‘int main()’:
prog.cpp:23:2: error: static assertion failed: correct
static_assert(is_template<std::array<int, 2>>::value == true, "correct"); // WRONG COMPILE ERROR
^~~~~~~~~~~~~