diff --git a/CMakeLists.txt b/CMakeLists.txt index b05771c..0280ac7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,7 +22,6 @@ endif() add_library(ring-buffer INTERFACE) target_include_directories(ring-buffer INTERFACE include/) -target_compile_features(ring-buffer INTERFACE cxx_std_11) if(RING_BUFFER_CONSTEXPR) target_compile_definitions(ring-buffer INTERFACE RING_BUFFER_CONSTEXPR) diff --git a/detect/cxxstd.cpp b/detect/cxxstd.cpp new file mode 100644 index 0000000..56e1c7b --- /dev/null +++ b/detect/cxxstd.cpp @@ -0,0 +1,5 @@ +#if __cpluplus < CXX_STANDARD +#error "c++ standard not new enough" +#endif + +int main() {} diff --git a/detect/features.cmake b/detect/features.cmake index cc63934..4c7bb87 100644 --- a/detect/features.cmake +++ b/detect/features.cmake @@ -1,9 +1,21 @@ -if(${CMAKE_CXX_STANDARD} GREATER_EQUAL 11) +try_compile(cxx-least-11 ${CMAKE_BINARY_DIR}/detect ${CMAKE_SOURCE_DIR}/detect/cxxstd.cpp + COMPILE_DEFINITIONS CXX_STANDARD=201103L + CMAKE_CXX_STANDARD ${CMAKE_CXX_STANDARD} + CXX_STANDARD_REQUIRED ${CMAKE_CXX_STANDARD_REQUIRED} + CXX_EXTENSIONS ${CMAKE_CXX_EXTENSIONS} +) +if(cxx-least-11) set(RING_BUFFER_NOEXCEPT ON) message(STATUS "Enabling RING_BUFFER_NOEXCEPT (C++11 and up)") endif() -if(${CMAKE_CXX_STANDARD} GREATER_EQUAL 14) +try_compile(cxx-least-14 ${CMAKE_BINARY_DIR}/detect ${CMAKE_SOURCE_DIR}/detect/cxxstd.cpp + COMPILE_DEFINITIONS CXX_STANDARD=201402L + CMAKE_CXX_STANDARD ${CMAKE_CXX_STANDARD} + CXX_STANDARD_REQUIRED ${CMAKE_CXX_STANDARD_REQUIRED} + CXX_EXTENSIONS ${CMAKE_CXX_EXTENSIONS} +) +if(cxx-least-14) set(RING_BUFFER_CONSTEXPR ON) message(STATUS "Enabling RING_BUFFER_CONSTEXPR (C++14 and up)") endif()