template<typename T1>
struct Outer
{
	void foo()
	{
	}
    
	Outer() : inner( &Outer::foo )  // pass ptr member function
	{
	}
    
    template<typename T2, void (T2::*F)()>
	struct Inner
	{
		Inner( F f )    // signature
		{
		}
	};
    
    Inner<Outer,&Outer::foo> inner;
};

int main()
{
	Outer<int> outer;
}