1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 // This file contains macros and macro-like constructs (e.g., templates) that
6 // are commonly used throughout Chromium source. (It may also contain things
7 // that are closely related to things that are commonly used that belong in this
10 #ifndef BASE_MACROS_H_
11 #define BASE_MACROS_H_
13 // Put this in the declarations for a class to be uncopyable.
14 #define DISALLOW_COPY(TypeName) \
15 TypeName(const TypeName&) = delete
17 // Put this in the declarations for a class to be unassignable.
18 #define DISALLOW_ASSIGN(TypeName) TypeName& operator=(const TypeName&) = delete
20 // Put this in the declarations for a class to be uncopyable and unassignable.
21 #define DISALLOW_COPY_AND_ASSIGN(TypeName) \
22 DISALLOW_COPY(TypeName); \
23 DISALLOW_ASSIGN(TypeName)
25 // A macro to disallow all the implicit constructors, namely the
26 // default constructor, copy constructor and operator= functions.
27 // This is especially useful for classes containing only static methods.
28 #define DISALLOW_IMPLICIT_CONSTRUCTORS(TypeName) \
29 TypeName() = delete; \
30 DISALLOW_COPY_AND_ASSIGN(TypeName)
32 // Used to explicitly mark the return value of a function as unused. If you are
33 // really sure you don't want to do anything with the return value of a function
34 // that has been marked WARN_UNUSED_RESULT, wrap it with this. Example:
36 // std::unique_ptr<MyType> my_var = ...;
37 // if (TakeOwnership(my_var.get()) == SUCCESS)
38 // ignore_result(my_var.release());
41 inline void ignore_result(const T&) {
44 #endif // BASE_MACROS_H_