Merge "Base: assume and use C++11 in libbase"

This commit is contained in:
Treehugger Robot 2016-09-01 22:32:42 +00:00 committed by Gerrit Code Review
commit 43824e72c7
2 changed files with 7 additions and 25 deletions

View file

@ -265,7 +265,7 @@ static constexpr bool kEnableDChecks = true;
// MakeEagerEvaluator to infer the types of LHS and RHS. // MakeEagerEvaluator to infer the types of LHS and RHS.
template <typename LHS, typename RHS> template <typename LHS, typename RHS>
struct EagerEvaluator { struct EagerEvaluator {
EagerEvaluator(LHS l, RHS r) : lhs(l), rhs(r) { constexpr EagerEvaluator(LHS l, RHS r) : lhs(l), rhs(r) {
} }
LHS lhs; LHS lhs;
RHS rhs; RHS rhs;
@ -273,7 +273,7 @@ struct EagerEvaluator {
// Helper function for CHECK_xx. // Helper function for CHECK_xx.
template <typename LHS, typename RHS> template <typename LHS, typename RHS>
static inline EagerEvaluator<LHS, RHS> MakeEagerEvaluator(LHS lhs, RHS rhs) { constexpr EagerEvaluator<LHS, RHS> MakeEagerEvaluator(LHS lhs, RHS rhs) {
return EagerEvaluator<LHS, RHS>(lhs, rhs); return EagerEvaluator<LHS, RHS>(lhs, rhs);
} }

View file

@ -41,18 +41,9 @@
// Note, that most uses of DISALLOW_ASSIGN and DISALLOW_COPY are broken // Note, that most uses of DISALLOW_ASSIGN and DISALLOW_COPY are broken
// semantically, one should either use disallow both or neither. Try to // semantically, one should either use disallow both or neither. Try to
// avoid these in new code. // avoid these in new code.
//
// When building with C++11 toolchains, just use the language support
// for explicitly deleted methods.
#if __cplusplus >= 201103L
#define DISALLOW_COPY_AND_ASSIGN(TypeName) \ #define DISALLOW_COPY_AND_ASSIGN(TypeName) \
TypeName(const TypeName&) = delete; \ TypeName(const TypeName&) = delete; \
void operator=(const TypeName&) = delete void operator=(const TypeName&) = delete
#else
#define DISALLOW_COPY_AND_ASSIGN(TypeName) \
TypeName(const TypeName&); \
void operator=(const TypeName&)
#endif
// A macro to disallow all the implicit constructors, namely the // A macro to disallow all the implicit constructors, namely the
// default constructor, copy constructor and operator= functions. // default constructor, copy constructor and operator= functions.
@ -60,18 +51,9 @@
// This should be used in the private: declarations for a class // This should be used in the private: declarations for a class
// that wants to prevent anyone from instantiating it. This is // that wants to prevent anyone from instantiating it. This is
// especially useful for classes containing only static methods. // especially useful for classes containing only static methods.
//
// When building with C++11 toolchains, just use the language support
// for explicitly deleted methods.
#if __cplusplus >= 201103L
#define DISALLOW_IMPLICIT_CONSTRUCTORS(TypeName) \ #define DISALLOW_IMPLICIT_CONSTRUCTORS(TypeName) \
TypeName() = delete; \ TypeName() = delete; \
DISALLOW_COPY_AND_ASSIGN(TypeName) DISALLOW_COPY_AND_ASSIGN(TypeName)
#else
#define DISALLOW_IMPLICIT_CONSTRUCTORS(TypeName) \
TypeName(); \
DISALLOW_COPY_AND_ASSIGN(TypeName)
#endif
// The arraysize(arr) macro returns the # of elements in an array arr. // The arraysize(arr) macro returns the # of elements in an array arr.
// The expression is a compile-time constant, and therefore can be // The expression is a compile-time constant, and therefore can be
@ -174,10 +156,10 @@ void UNUSED(const T&...) {
// only if there are no statements on the execution path between it and the // only if there are no statements on the execution path between it and the
// next switch label. // next switch label.
// //
// When compiled with clang in C++11 mode, the FALLTHROUGH_INTENDED macro is // When compiled with clang, the FALLTHROUGH_INTENDED macro is expanded to
// expanded to [[clang::fallthrough]] attribute, which is analysed when // [[clang::fallthrough]] attribute, which is analysed when performing switch
// performing switch labels fall-through diagnostic ('-Wimplicit-fallthrough'). // labels fall-through diagnostic ('-Wimplicit-fallthrough'). See clang
// See clang documentation on language extensions for details: // documentation on language extensions for details:
// http://clang.llvm.org/docs/LanguageExtensions.html#clang__fallthrough // http://clang.llvm.org/docs/LanguageExtensions.html#clang__fallthrough
// //
// When used with unsupported compilers, the FALLTHROUGH_INTENDED macro has no // When used with unsupported compilers, the FALLTHROUGH_INTENDED macro has no
@ -185,7 +167,7 @@ void UNUSED(const T&...) {
// //
// In either case this macro has no effect on runtime behavior and performance // In either case this macro has no effect on runtime behavior and performance
// of code. // of code.
#if defined(__clang__) && __cplusplus >= 201103L && defined(__has_warning) #if defined(__clang__) && defined(__has_warning)
#if __has_feature(cxx_attributes) && __has_warning("-Wimplicit-fallthrough") #if __has_feature(cxx_attributes) && __has_warning("-Wimplicit-fallthrough")
#define FALLTHROUGH_INTENDED [[clang::fallthrough]] // NOLINT #define FALLTHROUGH_INTENDED [[clang::fallthrough]] // NOLINT
#endif #endif