#include <iostream>
#include <iomanip>
using namespace std;
template<class T, int N>
constexpr int Val = 3;
template<>
constexpr int Val<int,0> = 5;
template<int N>
constexpr int Val<char,N> = N;
template<class T, int N, int M = Val<T,N>>
class Test
{
public:
void method()
{
cout << M << endl;
}
};
int main(int argc, const char * argv[])
{
Test<int,0> t1;
t1.method();
Test<int,5> t2;
t2.method();
Test<char,7> t3;
t3.method();
Test<char,7,15> t4;
t4.method();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0ZW1wbGF0ZTxjbGFzcyBULCBpbnQgTj4KY29uc3RleHByIGludCBWYWwgPSAzOwoKdGVtcGxhdGU8Pgpjb25zdGV4cHIgaW50IFZhbDxpbnQsMD4gPSA1OwoKCnRlbXBsYXRlPGludCBOPgpjb25zdGV4cHIgaW50IFZhbDxjaGFyLE4+ID0gTjsKCgp0ZW1wbGF0ZTxjbGFzcyBULCBpbnQgTiwgaW50IE0gPSBWYWw8VCxOPj4KY2xhc3MgVGVzdAp7CnB1YmxpYzoKICAgIHZvaWQgbWV0aG9kKCkKICAgIHsKICAgICAgICBjb3V0IDw8IE0gPDwgZW5kbDsKICAgIH0KfTsKCmludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICogYXJndltdKQp7CiAgICBUZXN0PGludCwwPiB0MTsKICAgIHQxLm1ldGhvZCgpOwogICAgVGVzdDxpbnQsNT4gdDI7CiAgICB0Mi5tZXRob2QoKTsKICAgIFRlc3Q8Y2hhciw3PiB0MzsKICAgIHQzLm1ldGhvZCgpOwogICAgVGVzdDxjaGFyLDcsMTU+IHQ0OwogICAgdDQubWV0aG9kKCk7Cn0KCgo=