blob: cda8e3a99b7c5a40e672b6d5513716b7c65b688c [file] [log] [blame]
[email protected]a1683a12014-01-08 21:38:301// 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.
4
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
8// file.)
9
10#ifndef BASE_MACROS_H_
11#define BASE_MACROS_H_
12
mlamouria99741d52015-05-21 22:54:0513// Put this in the declarations for a class to be uncopyable.
[email protected]a1683a12014-01-08 21:38:3014#define DISALLOW_COPY(TypeName) \
mlamouria99741d52015-05-21 22:54:0515 TypeName(const TypeName&) = delete
[email protected]a1683a12014-01-08 21:38:3016
mlamouria99741d52015-05-21 22:54:0517// Put this in the declarations for a class to be unassignable.
Clemens Hammachercec5fde2017-07-20 08:53:1618#define DISALLOW_ASSIGN(TypeName) TypeName& operator=(const TypeName&) = delete
[email protected]a1683a12014-01-08 21:38:3019
Clemens Hammachercec5fde2017-07-20 08:53:1620// Put this in the declarations for a class to be uncopyable and unassignable.
pkasting999f15f2016-05-26 22:03:3421#define DISALLOW_COPY_AND_ASSIGN(TypeName) \
Clemens Hammachercec5fde2017-07-20 08:53:1622 DISALLOW_COPY(TypeName); \
23 DISALLOW_ASSIGN(TypeName)
[email protected]a1683a12014-01-08 21:38:3024
[email protected]a1683a12014-01-08 21:38:3025// A macro to disallow all the implicit constructors, namely the
26// default constructor, copy constructor and operator= functions.
Clemens Hammachercec5fde2017-07-20 08:53:1627// This is especially useful for classes containing only static methods.
[email protected]a1683a12014-01-08 21:38:3028#define DISALLOW_IMPLICIT_CONSTRUCTORS(TypeName) \
mlamouri8cd00292015-07-03 10:27:5029 TypeName() = delete; \
[email protected]a1683a12014-01-08 21:38:3030 DISALLOW_COPY_AND_ASSIGN(TypeName)
31
[email protected]a1683a12014-01-08 21:38:3032// 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:
35//
dcheng093de9b2016-04-04 21:25:5136// std::unique_ptr<MyType> my_var = ...;
[email protected]a1683a12014-01-08 21:38:3037// if (TakeOwnership(my_var.get()) == SUCCESS)
38// ignore_result(my_var.release());
39//
40template<typename T>
41inline void ignore_result(const T&) {
42}
43
[email protected]a1683a12014-01-08 21:38:3044#endif // BASE_MACROS_H_