#include <iostream>
using namespace std;
template <typename Ref, typename T1, typename... TN>
struct all_match;
template <typename Ref, typename T>
struct all_match<Ref,T>
{
static constexpr bool value = std::is_same<T,Ref>::value;
};
template <typename Ref, typename T1, typename... TN>
struct all_match
{
static constexpr bool value = std::is_same<T1,Ref>::value && all_match<Ref, TN...>::value;
};
template <typename T, typename... U>
typename std::enable_if<all_match<int, U...>::value, void>::
type testFunction(T a, U... bs) {
std::cout << "bs are integers\n";
}
template <typename T, typename... U>
typename std::enable_if<all_match<char, U...>::value, void>::
type testFunction(T a, U... bs) {
std::cout << "bs are chars\n";
}
int main() {
testFunction(1.0, 3); // ok
testFunction(1.0, 'c', 'r', 'p'); // ok
// testFunction(1.0, 3, 4.0f, 5); // fail
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPHR5cGVuYW1lIFJlZiwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lLi4uIFROPgpzdHJ1Y3QgYWxsX21hdGNoOwogCnRlbXBsYXRlIDx0eXBlbmFtZSBSZWYsIHR5cGVuYW1lIFQ+CnN0cnVjdCBhbGxfbWF0Y2g8UmVmLFQ+CnsKCXN0YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZSA9IHN0ZDo6aXNfc2FtZTxULFJlZj46OnZhbHVlOwp9OwogCnRlbXBsYXRlIDx0eXBlbmFtZSBSZWYsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZS4uLiBUTj4Kc3RydWN0IGFsbF9tYXRjaAp7CglzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWUgPSBzdGQ6OmlzX3NhbWU8VDEsUmVmPjo6dmFsdWUgJiYgYWxsX21hdGNoPFJlZiwgVE4uLi4+Ojp2YWx1ZTsKfTsKIAp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gVT4KdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8YWxsX21hdGNoPGludCwgVS4uLj46OnZhbHVlLCB2b2lkPjo6CnR5cGUgdGVzdEZ1bmN0aW9uKFQgYSwgVS4uLiBicykgewogICAgc3RkOjpjb3V0IDw8ICJicyBhcmUgaW50ZWdlcnNcbiI7Cn0KIAp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gVT4KdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8YWxsX21hdGNoPGNoYXIsIFUuLi4+Ojp2YWx1ZSwgdm9pZD46Ogp0eXBlIHRlc3RGdW5jdGlvbihUIGEsIFUuLi4gYnMpIHsKICAgIHN0ZDo6Y291dCA8PCAiYnMgYXJlIGNoYXJzXG4iOwp9CiAKaW50IG1haW4oKSB7Cgl0ZXN0RnVuY3Rpb24oMS4wLCAzKTsgLy8gb2sKCXRlc3RGdW5jdGlvbigxLjAsICdjJywgJ3InLCAncCcpOyAvLyBvawoJLy8gdGVzdEZ1bmN0aW9uKDEuMCwgMywgNC4wZiwgNSk7IC8vIGZhaWwKCXJldHVybiAwOwp9