From 6d6fb09c5e8a84abb77b20fe8fc28e731d7cefb9 Mon Sep 17 00:00:00 2001 From: Nick Gerleman Date: Wed, 12 Jul 2023 09:38:40 -0700 Subject: [PATCH] Target C++ 17 (#38303) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/38303 X-link: https://github.com/facebook/yoga/pull/1327 This bumps Yoga to C++ 17 for a few reasons: 1. New versions of C++ may introduce behavior changes (e.g. evaluation order) and deprecations. Keeping the version closer to the version of large users helps avoid that. 2. C++ 17 unblocks some new bits I have wanted to use at times, like `std::optional`, `std::variant`, `if constexpr`, `[[nodiscard]]`. 3. There are already changes in C++ 20 that would be directly useful to Yoga, like `std::bit_cast` to avoid `memcpy` style type punning. There has been some contention around C++ versions before, but by the time the next stable version of Yoga is out, it will have been more than 6 years (~2 C++ versions) since a stable version of Clang/LLVM with C++ 17 support. I would not like to go back further than n-2. Changelog: [Internal] Reviewed By: christophpurrer Differential Revision: D47383922 fbshipit-source-id: eb95d4853f2168b68d6df5fddb797236eac55870 --- .../react-native/ReactCommon/yoga/cmake/project-defaults.cmake | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/react-native/ReactCommon/yoga/cmake/project-defaults.cmake b/packages/react-native/ReactCommon/yoga/cmake/project-defaults.cmake index 87f0e6b791a..d02a2836df6 100644 --- a/packages/react-native/ReactCommon/yoga/cmake/project-defaults.cmake +++ b/packages/react-native/ReactCommon/yoga/cmake/project-defaults.cmake @@ -3,7 +3,7 @@ # This source code is licensed under the MIT license found in the # LICENSE file in the root directory of this source tree. -set(CMAKE_CXX_STANDARD 14) +set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_VISIBILITY_PRESET hidden) set(CMAKE_POSITION_INDEPENDENT_CODE ON) @@ -33,6 +33,7 @@ add_compile_options( -fexceptions # Enable warnings and warnings as errors -Wall + -Wextra -Werror # Disable RTTI $<$:-fno-rtti>