// Part of the Crubit project, under the Apache License v2.0 with LLVM
// Exceptions. See /LICENSE for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

#ifndef CRUBIT_RS_BINDINGS_FROM_CC_TEST_GOLDEN_UNSUPPORTED_H_
#define CRUBIT_RS_BINDINGS_FROM_CC_TEST_GOLDEN_UNSUPPORTED_H_

#pragma clang lifetime_elision

struct TrivialCustomType final {
  // Replace this with some other unsupported operator, if support is later
  // added.
  bool operator||(const TrivialCustomType&) const;

  int i;
};

struct NontrivialCustomType final {
  NontrivialCustomType(NontrivialCustomType&&);
  // Replace this with some other unsupported operator, if support is later
  // added.
  bool operator||(const NontrivialCustomType&) const;

  int i;
};

// This function can't have bindings because of both its return type and its
// parameter type.
//
// TODO(jeanpierreda): Use a dedicated unsupported type or attribute so that this
// test is more stable and doesn't depend on which exact types/features are not
// currently supported.
volatile int* MultipleReasons(volatile int* n);

struct ContainingStruct final {
  struct NestedStruct final {
    void NonStaticMemberFunction();
    void StaticMemberFunction();
  };

  // Doc comment for an unsupported field.
  NestedStruct nested_struct;
};

#endif  // CRUBIT_RS_BINDINGS_FROM_CC_TEST_GOLDEN_UNSUPPORTED_H_
