Explorar el Código

Merge topic 'auto-ptr'

e6380b11 Use std::auto_ptr on compilers that do not warn about it
67480c05 Add a feature check to test availability of auto_ptr
Brad King hace 9 años
padre
commit
a721830767

+ 18 - 0
Source/Checks/cm_cxx_auto_ptr.cxx

@@ -0,0 +1,18 @@
+#include <memory>
+
+std::auto_ptr<int> get_auto_ptr()
+{
+  std::auto_ptr<int> ptr;
+  ptr = std::auto_ptr<int>(new int(0));
+  return ptr;
+}
+
+int use_auto_ptr(std::auto_ptr<int> ptr)
+{
+  return *ptr;
+}
+
+int main()
+{
+  return use_auto_ptr(get_auto_ptr());
+}

+ 1 - 0
Source/Checks/cm_cxx_features.cmake

@@ -32,6 +32,7 @@ function(cm_check_cxx_feature name)
 endfunction()
 
 if(CMAKE_CXX_STANDARD)
+  cm_check_cxx_feature(auto_ptr)
   cm_check_cxx_feature(make_unique)
   if(CMake_HAVE_CXX_MAKE_UNIQUE)
     set(CMake_HAVE_CXX_UNIQUE_PTR 1)

+ 1 - 0
Source/cmConfigure.cmake.h.in

@@ -30,6 +30,7 @@
 #cmakedefine CMAKE_USE_MACH_PARSER
 #cmakedefine CMAKE_USE_LIBUV
 #cmakedefine CMAKE_ENCODING_UTF8
+#cmakedefine CMake_HAVE_CXX_AUTO_PTR
 #cmakedefine CMake_HAVE_CXX_MAKE_UNIQUE
 #cmakedefine CMake_HAVE_CXX_NULLPTR
 #cmakedefine CMake_HAVE_CXX_OVERRIDE

+ 9 - 1
Source/cm_auto_ptr.hxx

@@ -14,7 +14,13 @@
 
 #include <cmConfigure.h>
 
-// FIXME: Use std::auto_ptr on compilers that do not warn about it.
+#ifdef CMake_HAVE_CXX_AUTO_PTR
+
+#include <memory>
+#define CM_AUTO_PTR std::auto_ptr
+
+#else
+
 #define CM_AUTO_PTR cm::auto_ptr
 
 // The HP compiler cannot handle the conversions necessary to use
@@ -219,3 +225,5 @@ public:
 #endif
 
 #endif
+
+#endif