#include <iostream>
using namespace std;
template<typename...T> struct check;
template<typename A, typename...B> struct check<A,B...> {
static constexpr bool pass = check<B...>::pass;
};
template<typename...R> struct check<int,char,bool,R...> {
static constexpr bool pass = true;
};
template<> struct check<> {
static constexpr bool pass = false;
};
template<typename... T>
constexpr bool checkTO(T...) { return check<T...>::pass; }
int main()
{
int a = 1;
char b = 'c';
bool c = true;
float d = 1.1;
float d1 = 1.1;
float d2 = 1.2;
std::cout << "TRUE1: " << checkTO() << std::endl;
std::cout << "TRUE1: " << checkTO(a, b, c) << std::endl;
std::cout << "TRUE2: " << checkTO(a, a, b, c) << std::endl;
std::cout << "TRUE3: " << checkTO(a, a, b, c, c) << std::endl;
std::cout << "TRUE4: " << checkTO(d, a, b, c, c) << std::endl;
std::cout << "TRUE5: " << checkTO(a, b, d1, a, b, c, d2) << std::endl;
std::cout << "TRUE6: " << checkTO(d1, d2, a, a, a, b, c) << std::endl;
std::cout << "TRUE7: " << checkTO(a, b, c, d1, d2, a, a, b, a, c) << std::endl;
std::cout << "FALSE1: " << checkTO(c, a, b) << std::endl;
std::cout << "FALSE2: " << checkTO(b, c, a) << std::endl;
std::cout << "FALSE3: " << checkTO(d1, a, b) << std::endl;
std::cout << "FALSE4: " << checkTO(a, b, d1, c) << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8dHlwZW5hbWUuLi5UPiBzdHJ1Y3QgY2hlY2s7CnRlbXBsYXRlPHR5cGVuYW1lIEEsIHR5cGVuYW1lLi4uQj4gc3RydWN0IGNoZWNrPEEsQi4uLj4gewoJc3RhdGljIGNvbnN0ZXhwciBib29sIHBhc3MgPSBjaGVjazxCLi4uPjo6cGFzczsKfTsKdGVtcGxhdGU8dHlwZW5hbWUuLi5SPiBzdHJ1Y3QgY2hlY2s8aW50LGNoYXIsYm9vbCxSLi4uPiB7CglzdGF0aWMgY29uc3RleHByIGJvb2wgcGFzcyA9IHRydWU7Cn07CnRlbXBsYXRlPD4gc3RydWN0IGNoZWNrPD4gewoJc3RhdGljIGNvbnN0ZXhwciBib29sIHBhc3MgPSBmYWxzZTsKfTsKCnRlbXBsYXRlPHR5cGVuYW1lLi4uIFQ+CmNvbnN0ZXhwciBib29sIGNoZWNrVE8oVC4uLikgeyByZXR1cm4gY2hlY2s8VC4uLj46OnBhc3M7IH0KCgoKaW50IG1haW4oKQp7CiAgaW50IGEgPSAxOwogIGNoYXIgYiA9ICdjJzsKICBib29sIGMgPSB0cnVlOwogIGZsb2F0IGQgPSAxLjE7CiAgZmxvYXQgZDEgPSAxLjE7CiAgZmxvYXQgZDIgPSAxLjI7CgogIHN0ZDo6Y291dCA8PCAiVFJVRTE6ICIgPDwgY2hlY2tUTygpIDw8IHN0ZDo6ZW5kbDsKICBzdGQ6OmNvdXQgPDwgIlRSVUUxOiAiIDw8IGNoZWNrVE8oYSwgYiwgYykgPDwgc3RkOjplbmRsOwogIHN0ZDo6Y291dCA8PCAiVFJVRTI6ICIgPDwgY2hlY2tUTyhhLCBhLCBiLCBjKSA8PCBzdGQ6OmVuZGw7CiAgc3RkOjpjb3V0IDw8ICJUUlVFMzogIiA8PCBjaGVja1RPKGEsIGEsIGIsIGMsIGMpIDw8IHN0ZDo6ZW5kbDsKICBzdGQ6OmNvdXQgPDwgIlRSVUU0OiAiIDw8IGNoZWNrVE8oZCwgYSwgYiwgYywgYykgPDwgc3RkOjplbmRsOwogIHN0ZDo6Y291dCA8PCAiVFJVRTU6ICIgPDwgY2hlY2tUTyhhLCBiLCBkMSwgYSwgYiwgYywgZDIpIDw8IHN0ZDo6ZW5kbDsKICBzdGQ6OmNvdXQgPDwgIlRSVUU2OiAiIDw8IGNoZWNrVE8oZDEsIGQyLCBhLCBhLCBhLCBiLCBjKSA8PCBzdGQ6OmVuZGw7CiAgc3RkOjpjb3V0IDw8ICJUUlVFNzogIiA8PCBjaGVja1RPKGEsIGIsIGMsIGQxLCBkMiwgYSwgYSwgYiwgYSwgYykgPDwgc3RkOjplbmRsOwogIHN0ZDo6Y291dCA8PCAiRkFMU0UxOiAiIDw8IGNoZWNrVE8oYywgYSwgYikgPDwgc3RkOjplbmRsOwogIHN0ZDo6Y291dCA8PCAiRkFMU0UyOiAiIDw8IGNoZWNrVE8oYiwgYywgYSkgPDwgc3RkOjplbmRsOwogIHN0ZDo6Y291dCA8PCAiRkFMU0UzOiAiIDw8IGNoZWNrVE8oZDEsIGEsIGIpIDw8IHN0ZDo6ZW5kbDsKICBzdGQ6OmNvdXQgPDwgIkZBTFNFNDogIiA8PCBjaGVja1RPKGEsIGIsIGQxLCBjKSA8PCBzdGQ6OmVuZGw7Cgp9