// 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" }
  {
  }
};