template <int X>
struct XX
{
static const int x = X;
};
template<typename TT, TT V, template<TT> class TX>
void fnx(TX<V> x)
{
static_assert(V == TX<V>::x, "IMPOSSIBLE!");
}
int main()
{
fnx<int>(XX<1>());
}
dGVtcGxhdGUgPGludCBYPgpzdHJ1Y3QgWFgKewogIHN0YXRpYyBjb25zdCBpbnQgeCA9IFg7Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUVCwgVFQgViwgdGVtcGxhdGU8VFQ+IGNsYXNzIFRYPgp2b2lkIGZueChUWDxWPiB4KQp7CiAgc3RhdGljX2Fzc2VydChWID09IFRYPFY+Ojp4LCAiSU1QT1NTSUJMRSEiKTsKfQoKaW50IG1haW4oKQp7CiAgZm54PGludD4oWFg8MT4oKSk7Cn0=