#include <type_traits>
#include <iostream>
enum class enabler {};
template<bool B>
using EnableIf = typename std::enable_if<B, enabler>::type;
template <int N>
struct test {
void foo() {}
template<int P = N, EnableIf<P == 2>...>
void bar() {
std::cout << "N == 2\n";
}
template <int P = N, EnableIf<P == 3>...>
void bar() {
std::cout << "N == 3\n";
}
};
int main() {
test<1> a = {};
test<2> b = {};
test<3> c = {};
// a.foo();
b.bar();
// c.foo();
// b.bar();
c.bar();
return 0;
}
I2luY2x1ZGUgPHR5cGVfdHJhaXRzPgojaW5jbHVkZSA8aW9zdHJlYW0+CgplbnVtIGNsYXNzIGVuYWJsZXIge307Cgp0ZW1wbGF0ZTxib29sIEI+CnVzaW5nIEVuYWJsZUlmID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8QiwgZW5hYmxlcj46OnR5cGU7Cgp0ZW1wbGF0ZSA8aW50IE4+CnN0cnVjdCB0ZXN0IHsKCXZvaWQgZm9vKCkge30KCQoJdGVtcGxhdGU8aW50IFAgPSBOLCBFbmFibGVJZjxQID09IDI+Li4uPgoJdm9pZCBiYXIoKSB7CgkJc3RkOjpjb3V0IDw8ICJOID09IDJcbiI7Cgl9CgogICAgdGVtcGxhdGUgPGludCBQID0gTiwgRW5hYmxlSWY8UCA9PSAzPi4uLj4KICAgIHZvaWQgYmFyKCkgewogICAgCXN0ZDo6Y291dCA8PCAiTiA9PSAzXG4iOwogICAgfQp9OwoKaW50IG1haW4oKSB7CiAgdGVzdDwxPiBhID0ge307CiAgdGVzdDwyPiBiID0ge307CiAgdGVzdDwzPiBjID0ge307CgogIC8vIGEuZm9vKCk7CiAgYi5iYXIoKTsKICAvLyBjLmZvbygpOwoKICAvLyBiLmJhcigpOwogIGMuYmFyKCk7CgogIHJldHVybiAwOwp9