diff --git a/CMake/AbseilDll.cmake b/CMake/AbseilDll.cmake index 32cc28f..e51d6df 100644 --- a/CMake/AbseilDll.cmake +++ b/CMake/AbseilDll.cmake @@ -699,31 +699,44 @@ set(ABSL_INTERNAL_TEST_DLL_TARGETS include(CheckCXXSourceCompiles) -check_cxx_source_compiles( - [==[ -#ifdef _MSC_VER -# if _MSVC_LANG < 201703L -# error "The compiler defaults or is configured for C++ < 17" -# endif -#elif __cplusplus < 201703L -# error "The compiler defaults or is configured for C++ < 17" -#endif -int main() { return 0; } -]==] +message(WARNING "ABSL_CXX_STANDARD: ${ABSL_CXX_STANDARD}") +message(WARNING "CMAKE_CXX_STANDARD: ${CMAKE_CXX_STANDARD}") +message(WARNING "CMAKE_CXX_STANDARD_REQUIRED: ${CMAKE_CXX_STANDARD_REQUIRED}") +message(WARNING "CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}") + +if(CMAKE_CXX_STANDARD GREATER_EQUAL 17) + set(ABSL_INTERNAL_AT_LEAST_CXX17 TRUE) +else() + check_cxx_source_compiles( + [==[ + #ifdef _MSC_VER + # if _MSVC_LANG < 201703L + # error "The compiler defaults or is configured for C++ < 17" + # endif + #elif __cplusplus < 201703L + # error "The compiler defaults or is configured for C++ < 17" + #endif + int main() { return 0; } + ]==] ABSL_INTERNAL_AT_LEAST_CXX17) +endif() -check_cxx_source_compiles( - [==[ -#ifdef _MSC_VER -# if _MSVC_LANG < 202002L -# error "The compiler defaults or is configured for C++ < 20" -# endif -#elif __cplusplus < 202002L -# error "The compiler defaults or is configured for C++ < 20" -#endif -int main() { return 0; } -]==] +if(CMAKE_CXX_STANDARD GREATER_EQUAL 20) + set(ABSL_INTERNAL_AT_LEAST_CXX20 TRUE) +else() + check_cxx_source_compiles( + [==[ + #ifdef _MSC_VER + # if _MSVC_LANG < 202002L + # error "The compiler defaults or is configured for C++ < 20" + # endif + #elif __cplusplus < 202002L + # error "The compiler defaults or is configured for C++ < 20" + #endif + int main() { return 0; } + ]==] ABSL_INTERNAL_AT_LEAST_CXX20) +endif() if(ABSL_INTERNAL_AT_LEAST_CXX20) set(ABSL_INTERNAL_CXX_STD_FEATURE cxx_std_20) @@ -731,6 +744,7 @@ elseif(ABSL_INTERNAL_AT_LEAST_CXX17) set(ABSL_INTERNAL_CXX_STD_FEATURE cxx_std_17) else() set(ABSL_INTERNAL_CXX_STD_FEATURE cxx_std_14) + message(FATAL_ERROR "Should not pass here !!!") endif() function(absl_internal_dll_contains) diff --git a/absl/flags/declare.h b/absl/flags/declare.h index 8d2a856..a154046 100644 --- a/absl/flags/declare.h +++ b/absl/flags/declare.h @@ -59,10 +59,15 @@ ABSL_NAMESPACE_END // Internal implementation of ABSL_DECLARE_FLAG to allow macro expansion of its // arguments. Clients must use ABSL_DECLARE_FLAG instead. +#if defined(_MSC_VER) +#define ABSL_DECLARE_FLAG_INTERNAL(type, name) \ + extern absl::Flag FLAGS_##name +#else #define ABSL_DECLARE_FLAG_INTERNAL(type, name) \ extern absl::Flag FLAGS_##name; \ namespace absl /* block flags in namespaces */ {} \ /* second redeclaration is to allow applying attributes */ \ extern absl::Flag FLAGS_##name +#endif // _MSC_VER #endif // ABSL_FLAGS_DECLARE_H_