// 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

// Mock of standard library <utility> header.

#ifndef CRUBIT_NULLABILITY_TEST_UTILITY_
#define CRUBIT_NULLABILITY_TEST_UTILITY_

namespace std {

template <class T>
struct remove_reference {
  using type = T;
};
template <class T>
struct remove_reference<T &> {
  using type = T;
};
template <class T>
struct remove_reference<T &&> {
  using type = T;
};

template <class T>
constexpr typename remove_reference<T>::type &&move(T &&);

template <class T>
inline constexpr T &&forward(typename remove_reference<T>::type &t) {
  return static_cast<T&&>(t);
}
template <class T>
inline constexpr T &&forward(typename remove_reference<T>::type &&t) {
  return static_cast<T&&>(t);
}

}  // namespace std

#endif  // CRUBIT_NULLABILITY_TEST_UTILITY_
