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