#include <iostream>
template<typename... T> using void_t = void;
template<typename T> struct TemporaryBindObject {};
template<template <typename...> class Dest, typename T, typename = void_t<>> struct toTypesOf
: std::false_type
{};
template<template <typename...> class Dest, template<typename...> class Src, typename... Ts> struct toTypesOf<Dest, Src<Ts...>, void_t<Dest<Ts..., float>>>
: std::true_type
{};
template<typename T> struct OneParamStruct{};
template<typename T1, typename T2> struct TwoParamStruct{};
int main()
{
std::cout << "Can bind to TwoParamStruct: " << toTypesOf<TwoParamStruct, TemporaryBindObject<int>>::value << std::endl;
std::cout << "Can bind to OneParamStruct: " << toTypesOf<OneParamStruct, TemporaryBindObject<int>>::value << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGU8dHlwZW5hbWUuLi4gVD4gdXNpbmcgdm9pZF90ID0gdm9pZDsKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBUZW1wb3JhcnlCaW5kT2JqZWN0IHt9OwoKdGVtcGxhdGU8dGVtcGxhdGUgPHR5cGVuYW1lLi4uPiBjbGFzcyBEZXN0LCB0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHZvaWRfdDw+PiBzdHJ1Y3QgdG9UeXBlc09mCgk6IHN0ZDo6ZmFsc2VfdHlwZQp7fTsKdGVtcGxhdGU8dGVtcGxhdGUgPHR5cGVuYW1lLi4uPiBjbGFzcyBEZXN0LCB0ZW1wbGF0ZTx0eXBlbmFtZS4uLj4gY2xhc3MgU3JjLCB0eXBlbmFtZS4uLiBUcz4gc3RydWN0IHRvVHlwZXNPZjxEZXN0LCBTcmM8VHMuLi4+LCB2b2lkX3Q8RGVzdDxUcy4uLiwgZmxvYXQ+Pj4KICAgIDogc3RkOjp0cnVlX3R5cGUKe307Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgT25lUGFyYW1TdHJ1Y3R7fTsKdGVtcGxhdGU8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPiBzdHJ1Y3QgVHdvUGFyYW1TdHJ1Y3R7fTsKCmludCBtYWluKCkKewogICAgc3RkOjpjb3V0IDw8ICJDYW4gYmluZCB0byBUd29QYXJhbVN0cnVjdDogIiA8PCB0b1R5cGVzT2Y8VHdvUGFyYW1TdHJ1Y3QsIFRlbXBvcmFyeUJpbmRPYmplY3Q8aW50Pj46OnZhbHVlIDw8IHN0ZDo6ZW5kbDsKICAgIHN0ZDo6Y291dCA8PCAiQ2FuIGJpbmQgdG8gT25lUGFyYW1TdHJ1Y3Q6ICIgPDwgdG9UeXBlc09mPE9uZVBhcmFtU3RydWN0LCBUZW1wb3JhcnlCaW5kT2JqZWN0PGludD4+Ojp2YWx1ZSA8PCBzdGQ6OmVuZGw7Cn0=