f7cb20d2ea89bbbe20eb8ae3c93683cca399bc84
[alexxy/gromacs.git] / cmake / gmxTestCXX11.cmake
1 include(CheckCXXSourceCompiles)
2 MACRO(GMX_TEST_CXX11 VARIABLE FLAG)
3     if(NOT WIN32)
4         set(CXX11_FLAG "-std=c++0x")
5     else()
6         set(CXX11_FLAG "/Qstd=c++0x")
7     endif()
8     CHECK_CXX_COMPILER_FLAG("${CXX11_FLAG}" CXXFLAG_STD_CXX0X)
9     if(NOT CXXFLAG_STD_CXX0X)
10         set(CXX11_FLAG "")
11     endif()
12     set(CMAKE_REQUIRED_DEFINITIONS "${CXX11_FLAG}")
13     check_cxx_source_compiles(
14 "#include <vector>
15 #include <memory>
16 #include <utility>
17 struct A {
18   A(int *i=NULL) : p(i) {} ;
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   v2.push_back(A(new int(5))); //detects bug in ICC
29 }" ${VARIABLE})
30     set(CMAKE_REQUIRED_DEFINITIONS "")
31     if(${VARIABLE})
32         set(${FLAG} ${CXX11_FLAG})
33     endif()
34 ENDMACRO()