Features: Fix COMPILE_FEATURES genex for C++ 14 and 17 features
When `CXX_STANDARD` is not at least 14 or 17, features enabled by the compiler for those standards should not be reported as existing by the `COMPILE_FEATURES` genex. Fix the implementation and add a test.
This commit is contained in:
parent
bfdfc6db9d
commit
4f7d9eef51
@ -4381,6 +4381,18 @@ bool cmMakefile::HaveCxxStandardAvailable(cmTarget const* target,
|
||||
cmStrCmp(existingCxxStandard))
|
||||
: cmArrayEnd(CXX_STANDARDS);
|
||||
|
||||
if (needCxx17 &&
|
||||
existingCxxIt < std::find_if(cmArrayBegin(CXX_STANDARDS),
|
||||
cmArrayEnd(CXX_STANDARDS),
|
||||
cmStrCmp("17"))) {
|
||||
return false;
|
||||
}
|
||||
if (needCxx14 &&
|
||||
existingCxxIt < std::find_if(cmArrayBegin(CXX_STANDARDS),
|
||||
cmArrayEnd(CXX_STANDARDS),
|
||||
cmStrCmp("14"))) {
|
||||
return false;
|
||||
}
|
||||
if (needCxx11 &&
|
||||
existingCxxIt < std::find_if(cmArrayBegin(CXX_STANDARDS),
|
||||
cmArrayEnd(CXX_STANDARDS),
|
||||
|
@ -428,6 +428,14 @@ else()
|
||||
HAVE_FINAL=$<COMPILE_FEATURES:cxx_final>
|
||||
HAVE_INHERITING_CONSTRUCTORS_AND_FINAL=$<COMPILE_FEATURES:cxx_inheriting_constructors,cxx_final>
|
||||
)
|
||||
if (CMAKE_CXX_STANDARD_DEFAULT)
|
||||
target_compile_definitions(CompileFeaturesGenex PRIVATE
|
||||
TEST_CXX_STD
|
||||
HAVE_CXX_STD_11=$<COMPILE_FEATURES:cxx_std_11>
|
||||
HAVE_CXX_STD_14=$<COMPILE_FEATURES:cxx_std_14>
|
||||
HAVE_CXX_STD_17=$<COMPILE_FEATURES:cxx_std_17>
|
||||
)
|
||||
endif()
|
||||
|
||||
add_executable(CompileFeaturesGenex2 genex_test.cpp)
|
||||
target_compile_features(CompileFeaturesGenex2 PRIVATE cxx_std_11)
|
||||
|
@ -11,6 +11,18 @@
|
||||
#error EXPECT_OVERRIDE_CONTROL not defined
|
||||
#endif
|
||||
|
||||
#ifdef TEST_CXX_STD
|
||||
#if !HAVE_CXX_STD_11
|
||||
#error HAVE_CXX_STD_11 is false with CXX_STANDARD == 11
|
||||
#endif
|
||||
#if HAVE_CXX_STD_14
|
||||
#error HAVE_CXX_STD_14 is true with CXX_STANDARD == 11
|
||||
#endif
|
||||
#if HAVE_CXX_STD_17
|
||||
#error HAVE_CXX_STD_17 is true with CXX_STANDARD == 11
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if !HAVE_OVERRIDE_CONTROL
|
||||
#if EXPECT_OVERRIDE_CONTROL
|
||||
#error "Expect override control feature"
|
||||
|
Loading…
Reference in New Issue
Block a user