#include <iostream>
template <std::size_t SIZE> class A
{
char b[SIZE];
public:
using const_buffer_t = const char (&)[SIZE];
A() : b{} { std::cout << "size: " << SIZE << " ctor 1\n"; }
A(const_buffer_t) : b{} { std::cout << "size: " << SIZE << " ctor 2\n"; }
A(const char*, std::size_t) : b{} { std::cout << "size: " << SIZE << " ctor 3\n"; }
explicit A(const A&) : b{} { std::cout << "size: " << SIZE << " ctor 4\n"; }
template <std::size_t OTHER_SIZE>
A(const char (&)[OTHER_SIZE]) : b{} { std::cout << "size: " << SIZE << " ctor 5\n"; }
template <std::size_t OTHER_SIZE>
explicit A(const A<OTHER_SIZE> &) : b{} { std::cout << "size: " << SIZE << " ctor 6\n"; }
};
int main()
{
A<5> a("five");
A<5> b("0123456789");
A<9> c(a);
A<5> d;
A<5> e(d);
A<9> f(d);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPHN0ZDo6c2l6ZV90IFNJWkU+IGNsYXNzIEEKewogICAgY2hhciBiW1NJWkVdOwoKcHVibGljOgoJdXNpbmcgY29uc3RfYnVmZmVyX3QgPSBjb25zdCBjaGFyICgmKVtTSVpFXTsKCglBKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYnt9IHsgc3RkOjpjb3V0IDw8ICJzaXplOiAiIDw8IFNJWkUgPDwgIiBjdG9yIDFcbiI7IH0KCUEoY29uc3RfYnVmZmVyX3QpICAgICAgICAgICAgICAgICAgOiBie30geyBzdGQ6OmNvdXQgPDwgInNpemU6ICIgPDwgU0laRSA8PCAiIGN0b3IgMlxuIjsgfQoJQShjb25zdCBjaGFyKiwgc3RkOjpzaXplX3QpICAgICAgICA6IGJ7fSB7IHN0ZDo6Y291dCA8PCAic2l6ZTogIiA8PCBTSVpFIDw8ICIgY3RvciAzXG4iOyB9CglleHBsaWNpdCBBKGNvbnN0IEEmKSAgICAgICAgICAgICAgIDogYnt9IHsgc3RkOjpjb3V0IDw8ICJzaXplOiAiIDw8IFNJWkUgPDwgIiBjdG9yIDRcbiI7IH0KCgl0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgT1RIRVJfU0laRT4KCUEoY29uc3QgY2hhciAoJilbT1RIRVJfU0laRV0pIDogYnt9IHsgc3RkOjpjb3V0IDw8ICJzaXplOiAiIDw8IFNJWkUgPDwgIiBjdG9yIDVcbiI7IH0KCgl0ZW1wbGF0ZSA8c3RkOjpzaXplX3QgT1RIRVJfU0laRT4KCWV4cGxpY2l0IEEoY29uc3QgQTxPVEhFUl9TSVpFPiAmKSA6IGJ7fSB7IHN0ZDo6Y291dCA8PCAic2l6ZTogIiA8PCBTSVpFIDw8ICIgY3RvciA2XG4iOyB9Cn07CgppbnQgbWFpbigpCnsKCUE8NT4gYSgiZml2ZSIpOwoJQTw1PiBiKCIwMTIzNDU2Nzg5Iik7CglBPDk+IGMoYSk7CglBPDU+IGQ7CglBPDU+IGUoZCk7CglBPDk+IGYoZCk7Cn0K