protocolbuffers / protobuf

Protocol Buffers - Google's data interchange format
http://protobuf.dev
Other
65.83k stars 15.52k forks source link

Fix uses of __cpp_lib_constexpr_string (#18890) #19264

Closed copybara-service[bot] closed 1 week ago

copybara-service[bot] commented 1 week ago

Fix uses of __cpp_lib_constexpr_string (#18890)

The intent of these checks was that if the C++20 version of this feature are enabled to execute the top codepath. libstdc++ 12 defines this feature as:

// in: /usr/include/c++/12/bits/basic_string.h

#ifdef __cpp_lib_is_constant_evaluated
// Support P0980R1 in C++20.
# define __cpp_lib_constexpr_string 201907L
#elif __cplusplus >= 201703L && _GLIBCXX_HAVE_IS_CONSTANT_EVALUATED
// Support P0426R1 changes to char_traits in C++17.
# define __cpp_lib_constexpr_string 201611L
#endif

So this codepath was always being hit even with -std=c++17 and then resulted in a failure because the string wasn't actually constinit. This matches the other use of this feature check in inlined_string_field.h

Closes #18890

COPYBARA_INTEGRATE_REVIEW=https://github.com/protocolbuffers/protobuf/pull/18890 from keith:ks/fix-uses-of-cpp_lib_constexpr_string edb4f5f6b6818496e56706a58b6db21315a83c22 FUTURE_COPYBARA_INTEGRATE_REVIEW=https://github.com/protocolbuffers/protobuf/pull/18890 from keith:ks/fix-uses-of-cpp_lib_constexpr_string edb4f5f6b6818496e56706a58b6db21315a83c22