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");
}
dGVtcGxhdGU8dHlwZW5hbWUgVD4Kc3RydWN0IENoZWNrVG1wCnsKCXN0YXRpYyBjb25zdGV4cHIgYm9vbCBWYWx1ZSA9IGZhbHNlOwp9Owp0ZW1wbGF0ZTx0ZW1wbGF0ZTx0eXBlbmFtZS4uLj4gY2xhc3MgVGVtcGxhdGUsIHR5cGVuYW1lLi4uIEFyZ3NUPgpzdHJ1Y3QgQ2hlY2tUbXA8VGVtcGxhdGU8QXJnc1QuLi4+Pgp7CglzdGF0aWMgY29uc3RleHByIGJvb2wgVmFsdWUgPSB0cnVlOwp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kc3RydWN0IEZvbwp7Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUPgpzdHJ1Y3QgQmFyCnsKfTsKCmludCBtYWluKCkKewoJc3RhdGljX2Fzc2VydCghQ2hlY2tUbXA8aW50Pjo6VmFsdWUsICJub3Qgd29ya2luZyIpOwoJc3RhdGljX2Fzc2VydChDaGVja1RtcDxGb288dm9pZD4+OjpWYWx1ZSwgIm5vdCB3b3JraW5nIik7CglzdGF0aWNfYXNzZXJ0KENoZWNrVG1wPEJhcjxjaGFyLCBkb3VibGU+Pjo6VmFsdWUsICJub3Qgd29ya2luZyIpOwoJc3RhdGljX2Fzc2VydChDaGVja1RtcDxCYXI8Pj46OlZhbHVlLCAibm90IHdvcmtpbmciKTsKfQ==