>>813
役に立たないかもしれないけど、要件はクリア?
#include <iostream>

template<class T> struct Y { T m; };
struct Z {};

template<template<class T> class C>
struct X
{
template<class A>
static void f(C<A> x)
{
std::cout << "f(C<A>)" << std::endl;
f(x.m);
}

template<class B>
static void f(B x)
{
std::cout << "f(B)" << std::endl;
}
};

int main()
{
Y<Y<Z> > y;
X<Y>::f(y);
return 0;
}