// Build don't link:

template <int I>
struct S {};

template <int J>
void foo(S<J - 1>);

template <class T>
void baz(S<sizeof(T)>);

template <int J>
void fun(S<J>, S<J * 2>);

void bar()
{
  foo<5>(S<4>()); // OK - 4 is 5 - 1.
  baz<int>(S<sizeof(int)>()); // OK
  fun(S<4>(), S<8>()); // OK - deduce J from first argument.
}
