From b326546229f2e01409bf7333d966967e1a10508f Mon Sep 17 00:00:00 2001 From: Matias Fontanini Date: Thu, 18 Feb 2016 20:52:18 -0800 Subject: [PATCH] Add checks for std::chrono and std::function --- CMakeLists.txt | 3 ++- cmake/Modules/CheckCXXFeatures.cmake | 2 ++ cmake/Modules/CheckCXXFeatures/cxx-test-chrono.cpp | 9 +++++++++ .../Modules/CheckCXXFeatures/cxx-test-functional.cpp | 11 +++++++++++ examples/stream_dump.cpp | 1 + 5 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 cmake/Modules/CheckCXXFeatures/cxx-test-chrono.cpp create mode 100644 cmake/Modules/CheckCXXFeatures/cxx-test-functional.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index c9314d3..7b0c71d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -74,7 +74,8 @@ OPTION(LIBTINS_ENABLE_CXX11 "Compile libtins with c++11 features" ON) IF(LIBTINS_ENABLE_CXX11) # We only use declval and decltype on gcc/clang as VC fails to build that code, # at least on VC2013 - IF(HAS_CXX11_RVALUE_REFERENCES AND ((HAS_CXX11_DECLVAL AND HAS_CXX11_DECLTYPE) OR MSVC)) + IF(HAS_CXX11_RVALUE_REFERENCES AND HAS_CXX11_FUNCTIONAL AND HAS_CXX11_CHRONO AND + ((HAS_CXX11_DECLVAL AND HAS_CXX11_DECLTYPE) OR MSVC)) SET(HAVE_CXX11 ON) MESSAGE(STATUS "Enabling C++11 features") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX11_COMPILER_FLAGS}") diff --git a/cmake/Modules/CheckCXXFeatures.cmake b/cmake/Modules/CheckCXXFeatures.cmake index 5e859ff..65ba08f 100644 --- a/cmake/Modules/CheckCXXFeatures.cmake +++ b/cmake/Modules/CheckCXXFeatures.cmake @@ -142,4 +142,6 @@ cxx11_check_feature("decltype" HAS_CXX11_DECLTYPE) cxx11_check_feature("declval" HAS_CXX11_DECLVAL) cxx11_check_feature("initializer_list" HAS_CXX11_INITIALIZER_LIST) cxx11_check_feature("rvalue-references" HAS_CXX11_RVALUE_REFERENCES) +cxx11_check_feature("functional" HAS_CXX11_FUNCTIONAL) +cxx11_check_feature("chrono" HAS_CXX11_CHRONO) cxx11_check_feature("builtin-swap" HAS_GCC_BUILTIN_SWAP) diff --git a/cmake/Modules/CheckCXXFeatures/cxx-test-chrono.cpp b/cmake/Modules/CheckCXXFeatures/cxx-test-chrono.cpp new file mode 100644 index 0000000..7ebc382 --- /dev/null +++ b/cmake/Modules/CheckCXXFeatures/cxx-test-chrono.cpp @@ -0,0 +1,9 @@ +#include + +using namespace std::chrono; + +int main() { + system_clock::time_point tp = system_clock::now(); + milliseconds ms = duration_cast(tp.time_since_epoch()); + return (ms.count() > 0) ? 0 : 1; +} \ No newline at end of file diff --git a/cmake/Modules/CheckCXXFeatures/cxx-test-functional.cpp b/cmake/Modules/CheckCXXFeatures/cxx-test-functional.cpp new file mode 100644 index 0000000..20d2b79 --- /dev/null +++ b/cmake/Modules/CheckCXXFeatures/cxx-test-functional.cpp @@ -0,0 +1,11 @@ +#include + +int add(int x, int y) { + return x + y; +} + +int main() { + std::function func; + func = std::bind(&add, std::placeholders::_1, std::placeholders::_2); + return (func(2, 2) == 4) ? 0 : 1; +} \ No newline at end of file diff --git a/examples/stream_dump.cpp b/examples/stream_dump.cpp index 1ae5e6a..2482cb9 100644 --- a/examples/stream_dump.cpp +++ b/examples/stream_dump.cpp @@ -40,6 +40,7 @@ using std::cerr; using std::endl; using std::bind; using std::string; +using std::to_string; using std::ostringstream; using std::exception;