diff --git a/CMake/AbseilHelpers.cmake b/CMake/AbseilHelpers.cmake index 6d03381..f81d57c 100644 --- a/CMake/AbseilHelpers.cmake +++ b/CMake/AbseilHelpers.cmake
@@ -166,6 +166,9 @@ set(PC_CFLAGS "${PC_CFLAGS} ${cflag}") elseif(${cflag} MATCHES "^(-W|/w[1234eo])") # Don't impose our warnings on others. + elseif(${cflag} MATCHES "^-m") + # Don't impose CPU instruction requirements on others, as + # the code performs feature detection on runtime. else() set(PC_CFLAGS "${PC_CFLAGS} ${cflag}") endif() @@ -258,10 +261,10 @@ endif() if(ABSL_PROPAGATE_CXX_STD) - # Abseil libraries require C++11 as the current minimum standard. + # Abseil libraries require C++14 as the current minimum standard. # Top-level application CMake projects should ensure a consistent C++ # standard for all compiled sources by setting CMAKE_CXX_STANDARD. - target_compile_features(${_NAME} PUBLIC cxx_std_11) + target_compile_features(${_NAME} PUBLIC cxx_std_14) else() # Note: This is legacy (before CMake 3.8) behavior. Setting the # target-level CXX_STANDARD property to ABSL_CXX_STANDARD (which is @@ -306,10 +309,10 @@ target_compile_definitions(${_NAME} INTERFACE ${ABSL_CC_LIB_DEFINES}) if(ABSL_PROPAGATE_CXX_STD) - # Abseil libraries require C++11 as the current minimum standard. + # Abseil libraries require C++14 as the current minimum standard. # Top-level application CMake projects should ensure a consistent C++ # standard for all compiled sources by setting CMAKE_CXX_STANDARD. - target_compile_features(${_NAME} INTERFACE cxx_std_11) + target_compile_features(${_NAME} INTERFACE cxx_std_14) # (INTERFACE libraries can't have the CXX_STANDARD property set, so there # is no legacy behavior else case). @@ -418,10 +421,10 @@ set_property(TARGET ${_NAME} PROPERTY FOLDER ${ABSL_IDE_FOLDER}/test) if(ABSL_PROPAGATE_CXX_STD) - # Abseil libraries require C++11 as the current minimum standard. + # Abseil libraries require C++14 as the current minimum standard. # Top-level application CMake projects should ensure a consistent C++ # standard for all compiled sources by setting CMAKE_CXX_STANDARD. - target_compile_features(${_NAME} PUBLIC cxx_std_11) + target_compile_features(${_NAME} PUBLIC cxx_std_14) else() # Note: This is legacy (before CMake 3.8) behavior. Setting the # target-level CXX_STANDARD property to ABSL_CXX_STANDARD (which is
diff --git a/CMake/README.md b/CMake/README.md index 8134615..0be3b92 100644 --- a/CMake/README.md +++ b/CMake/README.md
@@ -43,8 +43,8 @@ project(my_app_project) # Pick the C++ standard to compile with. -# Abseil currently supports C++11, C++14, and C++17. -set(CMAKE_CXX_STANDARD 11) +# Abseil currently supports C++14, C++17, and C++20. +set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) add_subdirectory(abseil-cpp)
diff --git a/CMakeLists.txt b/CMakeLists.txt index 8a20d04..10acf3b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt
@@ -64,7 +64,7 @@ endif() option(ABSL_PROPAGATE_CXX_STD - "Use CMake C++ standard meta features (e.g. cxx_std_11) that propagate to targets that link to Abseil" + "Use CMake C++ standard meta features (e.g. cxx_std_14) that propagate to targets that link to Abseil" OFF) # TODO: Default to ON for CMake 3.8 and greater. if((${CMAKE_VERSION} VERSION_GREATER_EQUAL 3.8) AND (NOT ABSL_PROPAGATE_CXX_STD)) message(WARNING "A future Abseil release will default ABSL_PROPAGATE_CXX_STD to ON for CMake 3.8 and up. We recommend enabling this option to ensure your project still builds correctly.")
diff --git a/README.md b/README.md index db3a7b4..8979002 100644 --- a/README.md +++ b/README.md
@@ -1,7 +1,7 @@ # Abseil - C++ Common Libraries The repository contains the Abseil C++ library code. Abseil is an open-source -collection of C++ code (compliant to C++11) designed to augment the C++ +collection of C++ code (compliant to C++14) designed to augment the C++ standard library. ## Table of Contents @@ -85,13 +85,14 @@ <br /> The `hash` library contains the hashing framework and default hash functor implementations for hashable types in Abseil. * [`memory`](absl/memory/) - <br /> The `memory` library contains C++11-compatible versions of - `std::make_unique()` and related memory management facilities. + <br /> The `memory` library contains memory management facilities that + augment C++'s `<memory>` library. * [`meta`](absl/meta/) - <br /> The `meta` library contains C++11-compatible versions of type checks + <br /> The `meta` library contains compatible versions of type checks available within C++14 and C++17 versions of the C++ `<type_traits>` library. * [`numeric`](absl/numeric/) - <br /> The `numeric` library contains C++11-compatible 128-bit integers. + <br /> The `numeric` library contains 128-bit integer types as well as + implementations of C++20's bitwise math functions. * [`profiling`](absl/profiling/) <br /> The `profiling` library contains utility code for profiling C++ entities. It is currently a private dependency of other Abseil libraries. @@ -100,7 +101,7 @@ `absl::Status` and `absl::StatusOr<T>`. * [`strings`](absl/strings/) <br /> The `strings` library contains a variety of strings routines and - utilities, including a C++11-compatible version of the C++17 + utilities, including a C++14-compatible version of the C++17 `std::string_view` type. * [`synchronization`](absl/synchronization/) <br /> The `synchronization` library contains concurrency primitives (Abseil's @@ -112,7 +113,7 @@ time zones. * [`types`](absl/types/) <br /> The `types` library contains non-container utility types, like a - C++11-compatible version of the C++17 `std::optional` type. + C++14-compatible version of the C++17 `std::optional` type. * [`utility`](absl/utility/) <br /> The `utility` library contains utility and helper code.
diff --git a/absl/base/policy_checks.h b/absl/base/policy_checks.h index 06b3243..d13073c 100644 --- a/absl/base/policy_checks.h +++ b/absl/base/policy_checks.h
@@ -50,11 +50,11 @@ #error "This package requires Visual Studio 2015 Update 2 or higher." #endif -// We support gcc 4.7 and later. +// We support gcc 5 and later. // This minimum will go up. #if defined(__GNUC__) && !defined(__clang__) -#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 7) -#error "This package requires gcc 4.7 or higher." +#if __GNUC__ < 5 +#error "This package requires gcc 5 or higher." #endif #endif @@ -69,13 +69,15 @@ // C++ Version Check // ----------------------------------------------------------------------------- -// Enforce C++11 as the minimum. Note that Visual Studio has not -// advanced __cplusplus despite being good enough for our purposes, so -// so we exempt it from the check. -#if defined(__cplusplus) && !defined(_MSC_VER) -#if __cplusplus < 201103L -#error "C++ versions less than C++11 are not supported." -#endif +// Enforce C++14 as the minimum. +#if defined(_MSVC_LANG) +#if _MSVC_LANG < 201402L +#error "C++ versions less than C++14 are not supported." +#endif // _MSVC_LANG < 201402L +#elif defined(__cplusplus) +#if __cplusplus < 201402L +#error "C++ versions less than C++14 are not supported." +#endif // __cplusplus < 201402L #endif // -----------------------------------------------------------------------------
diff --git a/absl/debugging/internal/stacktrace_riscv-inl.inc b/absl/debugging/internal/stacktrace_riscv-inl.inc index ba0775b..7123b71 100644 --- a/absl/debugging/internal/stacktrace_riscv-inl.inc +++ b/absl/debugging/internal/stacktrace_riscv-inl.inc
@@ -159,21 +159,6 @@ const uintptr_t max_size = STRICT_UNWINDING ? 100000 : 1000000; const uintptr_t frame_size = ComputeStackFrameSize(old_frame_pointer, new_frame_pointer); - - // If we have a alternate signal stack, the stack pointer may not be - // contiguous. In such a case, we can simply skip the check and assume that - // the non-contiguity is permissible. - if (frame_size == kUnknownFrameSize) { - assert(old_frame_pointer >= new_frame_pointer); - - stack_t ss{}; - if (sigaltstack(nullptr, &ss) == 0) { - if (ss.ss_flags & SS_DISABLE) - return nullptr; - return new_frame_pointer; - } - } - if (frame_size == kUnknownFrameSize || frame_size > max_size) return nullptr; }
diff --git a/absl/random/BUILD.bazel b/absl/random/BUILD.bazel index 08ecd19..ff20dd0 100644 --- a/absl/random/BUILD.bazel +++ b/absl/random/BUILD.bazel
@@ -306,6 +306,7 @@ cc_test( name = "exponential_distribution_test", size = "small", + timeout = "moderate", srcs = ["exponential_distribution_test.cc"], copts = ABSL_TEST_COPTS, linkopts = ABSL_DEFAULT_LINKOPTS,
diff --git a/absl/strings/string_view.h b/absl/strings/string_view.h index e3239f5..eae11b2 100644 --- a/absl/strings/string_view.h +++ b/absl/strings/string_view.h
@@ -63,12 +63,6 @@ #define ABSL_INTERNAL_STRING_VIEW_MEMCMP memcmp #endif // ABSL_HAVE_BUILTIN(__builtin_memcmp) -#if defined(__cplusplus) && __cplusplus >= 201402L -#define ABSL_INTERNAL_STRING_VIEW_CXX14_CONSTEXPR constexpr -#else -#define ABSL_INTERNAL_STRING_VIEW_CXX14_CONSTEXPR -#endif - namespace absl { ABSL_NAMESPACE_BEGIN @@ -341,7 +335,7 @@ // // Removes the first `n` characters from the `string_view`. Note that the // underlying string is not changed, only the view. - ABSL_INTERNAL_STRING_VIEW_CXX14_CONSTEXPR void remove_prefix(size_type n) { + constexpr void remove_prefix(size_type n) { ABSL_HARDENING_ASSERT(n <= length_); ptr_ += n; length_ -= n; @@ -351,7 +345,7 @@ // // Removes the last `n` characters from the `string_view`. Note that the // underlying string is not changed, only the view. - ABSL_INTERNAL_STRING_VIEW_CXX14_CONSTEXPR void remove_suffix(size_type n) { + constexpr void remove_suffix(size_type n) { ABSL_HARDENING_ASSERT(n <= length_); length_ -= n; } @@ -359,7 +353,7 @@ // string_view::swap() // // Swaps this `string_view` with another `string_view`. - ABSL_INTERNAL_STRING_VIEW_CXX14_CONSTEXPR void swap(string_view& s) noexcept { + constexpr void swap(string_view& s) noexcept { auto t = *this; *this = s; s = t; @@ -678,7 +672,6 @@ ABSL_NAMESPACE_END } // namespace absl -#undef ABSL_INTERNAL_STRING_VIEW_CXX14_CONSTEXPR #undef ABSL_INTERNAL_STRING_VIEW_MEMCMP #endif // ABSL_USES_STD_STRING_VIEW