#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;
}