#include <iostream>
template <int N>
struct A { };
template<typename T>
struct X
{
static const unsigned number;
};
template <typename T>
const unsigned X<T>::number = sizeof(T);
template <int N>
struct X<A<N>>
{
static const unsigned number = N * N;
};
int main()
{
std::cout << X<A<3>>::number << '\n';
std::cout << X<int>::number << '\n';
std::cout << X<A<6>>::number << '\n';
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPGludCBOPgpzdHJ1Y3QgQSB7IH07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpzdHJ1Y3QgWAp7CiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyOwp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNvbnN0IHVuc2lnbmVkIFg8VD46Om51bWJlciA9IHNpemVvZihUKTsKCnRlbXBsYXRlIDxpbnQgTj4Kc3RydWN0IFg8QTxOPj4KewogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlciA9IE4gKiBOOwp9OwoKaW50IG1haW4oKQp7CglzdGQ6OmNvdXQgPDwgWDxBPDM+Pjo6bnVtYmVyIDw8ICdcbic7CglzdGQ6OmNvdXQgPDwgWDxpbnQ+OjpudW1iZXIgPDwgJ1xuJzsKCXN0ZDo6Y291dCA8PCBYPEE8Nj4+OjpudW1iZXIgPDwgJ1xuJzsKfQ==