// Build don't link:
// GROUPS passed templates
template <class T>
void foo(T t) {}

template <class T>
struct S {};

template <class T>
void bar(T t)
{
  void (*f)(S<T> ) = &foo<S<T> >;
}


void baz()
{
  bar(3);
}
