#include <iostream>
typedef void (*vfunp)(...);

template <typename A>
struct X
{
  void  a1 () { (int)(vfunp)A::foo<2>(5); };
  void  a2 () { (int)(vfunp)A::template foo<2>(5); }

};

struct Y
{
  static void foo(...) { }
  template <int> static void* foo(...) { std::cout << "Oops!" << std::endl; return 0; }
};

int main ()
{
  X<Y> moo;
  moo.a1();
  moo.a2();
}