Merge release-4-6 into master
[alexxy/gromacs.git] / cmake / gmxTestCXX11.cmake
1 include(CheckCXXSourceCompiles)
2 MACRO(GMX_TEST_CXX11 VARIABLE FLAG)
3   MESSAGE(STATUS "Checking for C++11 support")
4   if(NOT WIN32)
5     set(CXX11_FLAG "-std=c++0x")
6   else()
7     set(CXX11_FLAG "/Qstd=c++0x")
8   endif()
9   CHECK_CXX_COMPILER_FLAG("${CXX11_FLAG}" CXXFLAG_STD_CXX0X)
10   if(NOT CXXFLAG_STD_CXX0X)
11     set(CXX11_FLAG "")
12   endif()
13   set(CMAKE_REQUIRED_DEFINITIONS "${CXX11_FLAG}")
14   check_cxx_source_compiles(
15 "#include <vector>
16 #include <memory>
17 #include <utility>
18 struct A {
19   std::unique_ptr<int> p;
20 };
21 int main() {
22   typedef std::unique_ptr<int> intPointer;
23   intPointer p(new int(10));
24   std::vector<intPointer> v;
25   v.push_back(std::move(p));
26   std::vector<A> v2;
27   v2.push_back(A());  //requires default move constructor
28 }" CXX11_SUPPORT_OK)
29   set(CMAKE_REQUIRED_DEFINITIONS "")
30   if(CXX11_SUPPORT_OK)
31     set(${VARIABLE} ${CXX11_SUPPORT_OK})
32     set(${FLAG} ${CXX11_FLAG})
33     MESSAGE(STATUS "Checking for C++11 support - yes")
34   else()
35     set(${FLAG} "")
36     MESSAGE(STATUS "Checking for C++11 support - no")
37   endif()
38 ENDMACRO()