#include <iostream>
#include <utility>
using namespace std;
template<int N>
struct Foo {
void enabled_if_2_exactly() {
static_assert(N==2, "Must be 2D");
}
void enabled_if_2_or_more() {
static_assert(N>=2, "Must be 2D or greater");
}
};
int main() {
Foo<2> foo2;
Foo<3> foo3;
foo2.enabled_if_2_or_more();
foo2.enabled_if_2_exactly();
foo3.enabled_if_2_or_more();
//foo3.enabled_if_2_exactly();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dXRpbGl0eT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnRlbXBsYXRlPGludCBOPgpzdHJ1Y3QgRm9vIHsKCgl2b2lkIGVuYWJsZWRfaWZfMl9leGFjdGx5KCkgewoJCXN0YXRpY19hc3NlcnQoTj09MiwgIk11c3QgYmUgMkQiKTsKCX0gCgoJdm9pZCBlbmFibGVkX2lmXzJfb3JfbW9yZSgpIHsKCQlzdGF0aWNfYXNzZXJ0KE4+PTIsICJNdXN0IGJlIDJEIG9yIGdyZWF0ZXIiKTsKCX0gCn07CgppbnQgbWFpbigpIHsKCglGb288Mj4gZm9vMjsKCUZvbzwzPiBmb28zOwoKICAgIGZvbzIuZW5hYmxlZF9pZl8yX29yX21vcmUoKTsKICAgIGZvbzIuZW5hYmxlZF9pZl8yX2V4YWN0bHkoKTsKCiAgICBmb28zLmVuYWJsZWRfaWZfMl9vcl9tb3JlKCk7CiAgICAvL2ZvbzMuZW5hYmxlZF9pZl8yX2V4YWN0bHkoKTsKCglyZXR1cm4gMDsKfQ==