(root)/
gcc-13.2.0/
gcc/
testsuite/
g++.dg/
modules/
contracts-3_b.C
// { dg-module-do run }
// { dg-additional-options "-fmodules-ts -fcontracts -fcontract-role=default:ignore,ignore,ignore" }
module;
#include <cstdio>
export module bar;
// { dg-module-cmi bar }
import foo;

template<typename T>
bool bar_fn_pre(T n) { printf("bar fn pre(%d)\n", n); return true; }

export
template<typename T>
T bar_fn(T n)
  [[ pre: bar_fn_pre(n) && n > 0 ]]
{
  printf("%s(%d)\n", __FUNCTION__, n);
  return n;
}

int main(int, char**)
{
  nontemplate(5);
  nontemplate(-5);
  fn(5);
  fn(-5);
  fn(5.3);
  fn(-5.3);
  void_fn(5);
  void_fn(-5);
  bar_fn(5);
  bar_fn(-5);
  return violation_count == 7 ? 0 : -1;
}