// PR c++/16829
// { dg-do compile }

void f1(int = 0, int);                       // { dg-error "default" }

void f2(int = 0, int) {}                     // { dg-error "default" }

void f3(int, int);
void f3(int = 0, int);                       // { dg-error "default" }

void f4(int, int);
void f4(int = 0, int) {}                     // { dg-error "default" }

void f5();
void f5(int = 0, int);                       // { dg-error "default" }

void f6();
void f6(int = 0, int) {}                     // { dg-error "default" }

template<typename> void g1(int = 0, int);    // { dg-error "default" }

template<typename> void g2(int = 0, int) {}  // { dg-error "default" }

template<typename> void g3(int, int);
template<typename> void g3(int = 0, int);    // { dg-error "default" }

template<typename> void g4(int, int);
template<typename> void g4(int = 0, int) {}  // { dg-error "default" }

template<typename> void g5();
template<typename> void g5(int = 0, int);    // { dg-error "default" }

template<typename> void g6();
template<typename> void g6(int = 0, int) {}  // { dg-error "default" }

template<typename T> void g7(T, T)   {}
template<typename T> void g7(T* = 0, T*) {}  // { dg-error "default" }


struct A
{
  void F1(int = 0, int);                       // { dg-error "default" }

  void F2(int = 0, int) {}                     // { dg-error "default" }

  void F3(int, int);

  void F4();
  void F4(int = 0, int);                       // { dg-error "default" }

  void F5();
  void F5(int = 0, int) {}                     // { dg-error "default" }

  template<typename> void G1(int = 0, int);    // { dg-error "default" }

  template<typename> void G2(int = 0, int) {}  // { dg-error "default" }

  template<typename> void G3(int, int);

  template<typename> void G4();
  template<typename> void G4(int = 0, int);    // { dg-error "default" }

  template<typename> void G5();
  template<typename> void G5(int = 0, int) {}  // { dg-error "default" }

  template<typename T> void G6(T, T)   {}
  template<typename T> void G6(T* = 0, T*) {}  // { dg-error "default" }
};

void A::F3(int = 0, int) {}                     // { dg-error "default" }

template<typename> void A::G3(int = 0, int) {}  // { dg-error "default" }


template<typename> struct B
{
  void F1(int = 0, int);                       // { dg-error "default" }

  void F2(int = 0, int) {}                     // { dg-error "default" }

  void F3(int, int);

  void F4();
  void F4(int = 0, int);                       // { dg-error "default" }

  void F5();
  void F5(int = 0, int) {}                     // { dg-error "default" }

  template<typename> void G1(int = 0, int);    // { dg-error "default" }

  template<typename> void G2(int = 0, int) {}  // { dg-error "default" }

  template<typename> void G3(int, int);

  template<typename> void G4();
  template<typename> void G4(int = 0, int);    // { dg-error "default" }

  template<typename> void G5();
  template<typename> void G5(int = 0, int) {}  // { dg-error "default" }

  template<typename T> void G6(T, T)   {}
  template<typename T> void G6(T* = 0, T*) {}  // { dg-error "default" }
};

template<typename T>
void B<T>::F3(int = 0, int) {}  // { dg-error "default" }

template<typename T> template<typename>
void B<T>::G3(int = 0, int) {}  // { dg-error "default" }
