void f(int a, int b = 123);
template <typename T> void g(T a, T b = 123);

template <typename U = int> struct A;
template <int N = 123> struct B;

struct S {
  template <typename T = int> void x();
  void y(int n = 123);
};

struct nontrivial { nontrivial(int); };
void h(nontrivial p = nontrivial(123));