(root)/
gcc-13.2.0/
gcc/
testsuite/
g++.dg/
contracts/
contracts-ctor-dtor2.C
// Tests to ensure that an invalid this parm cannot be used in pre on ctors or
// in post on dtors.
// { dg-do compile }
// { dg-options "-std=c++2a -fcontracts" }

struct F0
{
  F0() [[ pre: x > 0 ]]; // { dg-error "invalid use of member" }
  ~F0() [[ post: x > 0 ]]; // { dg-error "invalid use of member" }
  int x{-1};
};

struct F1
{
  F1() [[ pre: this->x > 0 ]]; // { dg-error "may not be used" }
  ~F1() [[ post: this->x > 0 ]]; // { dg-error "may not be used" }
  int x{-1};
};

struct F2
{
  F2()
    [[ post ret: false ]] // { dg-error "does not return a value" }
  {
  }
  ~F2()
    [[ post r: false ]] // { dg-error "does not return a value" }
  {
  }
  void f()
    [[ post r: false ]] // { dg-error "does not return a value" }
  {
  }
};