template<typename T>
struct CheckTmp
{
	static constexpr bool Value = false;
};
template<template<typename...> class Template, typename... ArgsT>
struct CheckTmp<Template<ArgsT...>>
{
	static constexpr bool Value = true;
};

template<typename T>
struct Foo
{
};

template<typename... T>
struct Bar
{
};

int main()
{
	static_assert(!CheckTmp<int>::Value, "not working");
	static_assert(CheckTmp<Foo<void>>::Value, "not working");
	static_assert(CheckTmp<Bar<char, double>>::Value, "not working");
	static_assert(CheckTmp<Bar<>>::Value, "not working");
}