blob: 8536ab3f30392588025a4561fa77dca77641d260 [file] [log] [blame]
Lingfeng Yangc5ae0372019-12-13 11:20:29 -08001// Copyright 2019 The Android Open Source Project
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15#pragma once
16
17// Use this inside a class declaration to ensure that the corresponding objects
18// cannot be copy-constructed or assigned. For example:
19//
20// class Foo {
21// ....
22// DISALLOW_COPY_AND_ASSIGN(Foo)
23// ....
24// };
25//
26// Note: this macro is sometimes defined in 3rd-party libs, so let's check first
27#ifndef DISALLOW_COPY_AND_ASSIGN
28
29#define DISALLOW_COPY_AND_ASSIGN(T) \
30 T(const T& other) = delete; \
31 T& operator=(const T& other) = delete
32
33#endif
34
35#ifndef DISALLOW_COPY_ASSIGN_AND_MOVE
36
37#define DISALLOW_COPY_ASSIGN_AND_MOVE(T) \
38 DISALLOW_COPY_AND_ASSIGN(T); \
39 T(T&&) = delete; \
40 T& operator=(T&&) = delete
41
42#endif