1
2# Test that the compiler is configured with a C++ 14 standard library
3
4set(TEST_CXX14_SOURCE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/try_cxx14_library.cpp)
5file(WRITE ${TEST_CXX14_SOURCE}
6"// Test for C++14 standard library support
7#include <tuple>
8
9int main(int argc, char **argv)
10{
11    std::tuple<int,double> t(1, 3.5);
12    // Accessing a tuple member by type is a C++14 feature
13    int j = std::get<int>(t);
14    return 0;
15}
16")
17
18
19try_compile(CXX14_LIBRARY_OKAY ${CMAKE_BINARY_DIR}
20            ${TEST_CXX14_SOURCE}
21            CXX_STANDARD 14
22            CXX_STANDARD_REQUIRED ON
23            OUTPUT_VARIABLE COMPILE_OUTPUT)
24
25
26if (NOT CXX14_LIBRARY_OKAY)
27  set(COMPILE_FAIL_OUTPUT cpp14_compile_fail.txt)
28  file(WRITE "${CMAKE_BINARY_DIR}/${COMPILE_FAIL_OUTPUT}" "${COMPILE_OUTPUT}")
29
30  message(STATUS "C++14 standard library support not found")
31  message("compiler is ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}")
32  if (CMAKE_CXX_COMPILER_ID MATCHES "GNU")
33    message("Compiler detected is g++.\n  Use version 5.0 or newer for a C++14 standard library")
34  elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
35    message("Compiler detected is clang++.\n  If not using libcxx, ensure a g++ version greater than 5.0 is on the path")
36  elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
37    message("Compiler detected is icpc.\n  Ensure a gcc version greater than 5.0 is on the path.  Or use the -cxxlib switch to point to a newer gcc install.")
38  endif()
39  message("  Output of test compile is in ${COMPILE_FAIL_OUTPUT}")
40  message(FATAL_ERROR "stopping")
41else()
42  message(STATUS "C++14 standard library supported")
43endif()
44