// PR c++/99274
// { dg-additional-options "-fmodules-ts -fno-module-lazy" }
// Check for conflicting defaults.

void f(int a, int b = 456);  // { dg-message "existing default declared here" }

template <typename T>
void g(T a, T b = {});  // { dg-message "existing default declared here" }

template <typename U = double>  // { dg-message "existing default declared here" }
struct A;

template <int N = 456>  // { dg-message "existing default declared here" }
struct B;

struct S {
  template <typename T = double>  // { dg-message "existing default declared here" }
  void x();

  void y(int n = 456);  // { dg-message "existing default declared here" }
};

struct nontrivial { nontrivial(int); };
void h(nontrivial p = nontrivial(456));  // { dg-message "existing default declared here" }

import "default-arg-2_a.H";

// { dg-error "conflicting default argument" "" { target *-*-* } 0 }