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>());
}