| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Define a set of C++ specific macros. | 5 // Define a set of C++ specific macros. |
| 6 // Mojo C++ API users can assume that mojo/public/cpp/system/macros.h | 6 // Mojo C++ API users can assume that mojo/public/cpp/system/macros.h |
| 7 // includes mojo/public/c/system/macros.h. | 7 // includes mojo/public/c/system/macros.h. |
| 8 | 8 |
| 9 #ifndef MOJO_PUBLIC_CPP_SYSTEM_MACROS_H_ | 9 #ifndef MOJO_PUBLIC_CPP_SYSTEM_MACROS_H_ |
| 10 #define MOJO_PUBLIC_CPP_SYSTEM_MACROS_H_ | 10 #define MOJO_PUBLIC_CPP_SYSTEM_MACROS_H_ |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 57 // by default.) | 57 // by default.) |
| 58 #define MOJO_MOVE_ONLY_TYPE(type) \ | 58 #define MOJO_MOVE_ONLY_TYPE(type) \ |
| 59 public: \ | 59 public: \ |
| 60 type&& Pass() MOJO_WARN_UNUSED_RESULT { return std::move(*this); } \ | 60 type&& Pass() MOJO_WARN_UNUSED_RESULT { return std::move(*this); } \ |
| 61 typedef void MoveOnlyTypeForCPP03; \ | 61 typedef void MoveOnlyTypeForCPP03; \ |
| 62 \ | 62 \ |
| 63 private: \ | 63 private: \ |
| 64 type(const type&) = delete; \ | 64 type(const type&) = delete; \ |
| 65 void operator=(const type&) = delete | 65 void operator=(const type&) = delete |
| 66 | 66 |
| 67 // The C++ standard requires that static const members have an out-of-class | |
| 68 // definition (in a single compilation unit), but MSVC chokes on this (when | |
| 69 // language extensions, which are required, are enabled). (You're only likely to | |
| 70 // notice the need for a definition if you take the address of the member or, | |
| 71 // more commonly, pass it to a function that takes it as a reference argument -- | |
| 72 // probably an STL function.) This macro makes MSVC do the right thing. See | |
| 73 // http://msdn.microsoft.com/en-us/library/34h23df8(v=vs.100).aspx for more | |
| 74 // information. This workaround does not appear to be necessary after VS2015. | |
| 75 // Use like: | |
| 76 // | |
| 77 // In the .h file: | |
| 78 // struct Foo { | |
| 79 // static const int kBar = 5; | |
| 80 // }; | |
| 81 // | |
| 82 // In the .cc file: | |
| 83 // MOJO_STATIC_CONST_MEMBER_DEFINITION const int Foo::kBar; | |
| 84 #if defined(_MSC_VER) && _MSC_VER < 1900 | |
| 85 #define MOJO_STATIC_CONST_MEMBER_DEFINITION __declspec(selectany) | |
| 86 #else | |
| 87 #define MOJO_STATIC_CONST_MEMBER_DEFINITION | |
| 88 #endif | |
| 89 | |
| 90 namespace mojo { | 67 namespace mojo { |
| 91 | 68 |
| 92 // Used to explicitly mark the return value of a function as unused. (Use this | 69 // Used to explicitly mark the return value of a function as unused. (Use this |
| 93 // if you are really sure you don't want to do anything with the return value of | 70 // if you are really sure you don't want to do anything with the return value of |
| 94 // a function marked with |MOJO_WARN_UNUSED_RESULT|. | 71 // a function marked with |MOJO_WARN_UNUSED_RESULT|. |
| 95 template <typename T> | 72 template <typename T> |
| 96 inline void ignore_result(const T&) { | 73 inline void ignore_result(const T&) { |
| 97 } | 74 } |
| 98 | 75 |
| 99 } // namespace mojo | 76 } // namespace mojo |
| 100 | 77 |
| 101 #endif // MOJO_PUBLIC_CPP_SYSTEM_MACROS_H_ | 78 #endif // MOJO_PUBLIC_CPP_SYSTEM_MACROS_H_ |
| OLD | NEW |