#include<iostream>
#include<type_traits>
template <typename ...Ts>
struct types;
template <typename T, typename ...Ts>
struct types < T, Ts... > : public types<Ts...>
{
template <typename F>
struct find : public types<Ts...>::template find<F>
{
};
template <>
struct find < T > : public std::true_type
{
typedef T type;
};
};
template <>
struct types < >
{
template <typename F>
struct find : public std::false_type
{};
};
int main()
{
using namespace std;
cout << types<int, char>::find<int>::value << endl;
cout << types<int, char>::find<float>::value << endl;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPHR5cGVfdHJhaXRzPgoKdGVtcGxhdGUgPHR5cGVuYW1lIC4uLlRzPgpzdHJ1Y3QgdHlwZXM7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgLi4uVHM+CnN0cnVjdCB0eXBlcyA8IFQsIFRzLi4uID4gOiBwdWJsaWMgdHlwZXM8VHMuLi4+CnsKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGPgogICAgc3RydWN0IGZpbmQgOiBwdWJsaWMgdHlwZXM8VHMuLi4+Ojp0ZW1wbGF0ZSBmaW5kPEY+Cgl7Cgl9OwoKCXRlbXBsYXRlIDw+CglzdHJ1Y3QgZmluZCA8IFQgPiA6IHB1YmxpYyBzdGQ6OnRydWVfdHlwZQoJewoJCXR5cGVkZWYgVCB0eXBlOwoJfTsKfTsKCnRlbXBsYXRlIDw+CnN0cnVjdCB0eXBlcyA8ID4KewoJdGVtcGxhdGUgPHR5cGVuYW1lIEY+CglzdHJ1Y3QgZmluZCA6IHB1YmxpYyBzdGQ6OmZhbHNlX3R5cGUKCXt9Owp9OwoKaW50IG1haW4oKQp7CiAgICB1c2luZyBuYW1lc3BhY2Ugc3RkOwogICAgY291dCA8PCB0eXBlczxpbnQsIGNoYXI+OjpmaW5kPGludD46OnZhbHVlIDw8IGVuZGw7CiAgICBjb3V0IDw8IHR5cGVzPGludCwgY2hhcj46OmZpbmQ8ZmxvYXQ+Ojp2YWx1ZSA8PCBlbmRsOwp9Cg==
prog.cpp:15:12: error: explicit specialization in non-namespace scope 'struct types<T, Ts ...>'
template <>
^
prog.cpp:16:9: error: template parameters not deducible in partial specialization:
struct find < T > : public std::true_type
^
prog.cpp:16:9: note: 'Ts'