chromium/tools/clang/plugins/tests/system/memory

// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef TOOLS_CLANG_PLUGINS_TESTS_SYSTEM_MEMORY_
#define TOOLS_CLANG_PLUGINS_TESTS_SYSTEM_MEMORY_

#include <atomic>

namespace std {

template <typename T>
struct shared_ptr {
  shared_ptr();
  ~shared_ptr();
  shared_ptr(const shared_ptr&);
  shared_ptr(shared_ptr&&);
  shared_ptr& operator=(const shared_ptr&);
  shared_ptr& operator=(shared_ptr&&);

 private:
  T* ptr_ = nullptr;
};

// The STL has this specialization defined through <memory>.
// Normally template parameters to std::atomic must be trivially copyable,
// but exceptions are made for std::shared_ptr and std::weak_ptr.
template <typename T>
struct atomic<shared_ptr<T> > {
  shared_ptr<T> i;

  atomic();
  ~atomic();
  atomic(const atomic&) = delete;
  atomic(atomic&&) = delete;
  atomic& operator=(const atomic&) = delete;
  atomic& operator=(atomic&&) = delete;
};

}  // namespace std

#endif  // TOOLS_CLANG_PLUGINS_TESTS_SYSTEM_MEMORY_