Mark vk::ResultValue::asTuple() & as deprecated, introduce vk::ResultValue::asTuple...
authorAndreas Süßenbach <asuessenbach@nvidia.com>
Tue, 27 Jun 2023 09:31:29 +0000 (11:31 +0200)
committerGitHub <noreply@github.com>
Tue, 27 Jun 2023 09:31:29 +0000 (11:31 +0200)
snippets/ResultValue.hpp
tests/UniqueHandle/UniqueHandle.cpp
vulkan/vulkan.hpp

index 4763e6e..7c9ada4 100644 (file)
       , value(std::move(v))
     {}
 
-    std::tuple<Result, UniqueHandle<Type, Dispatch>> asTuple()
+    VULKAN_HPP_DEPRECATED(
+      "asTuple() on an l-value is deprecated, as it implicitly moves the UniqueHandle out of the ResultValue. Use asTuple() on an r-value instead, requiring to explicitly move the UniqueHandle." )
+      std::tuple<Result, UniqueHandle<Type, Dispatch>>
+      asTuple() &
     {
       return std::make_tuple( result, std::move( value ) );
     }
 
-    Result                        result;
+    std::tuple<Result, UniqueHandle<Type, Dispatch>> asTuple() &&
+    {
+      return std::make_tuple( result, std::move( value ) );
+    }
+
+    Result                       result;
     UniqueHandle<Type, Dispatch>  value;
   };
 
       , value( std::move( v ) )
     {}
 
-    std::tuple<Result, std::vector<UniqueHandle<Type, Dispatch>>> asTuple()
+    VULKAN_HPP_DEPRECATED(
+      "asTuple() on an l-value is deprecated, as it implicitly moves the UniqueHandle out of the ResultValue. Use asTuple() on an r-value instead, requiring to explicitly move the UniqueHandle." )
+      std::tuple<Result, std::vector<UniqueHandle<Type, Dispatch>>>
+      asTuple() &
+    {
+      return std::make_tuple( result, std::move( value ) );
+    }
+
+    std::tuple<Result, std::vector<UniqueHandle<Type, Dispatch>>> asTuple() &&
     {
       return std::make_tuple( result, std::move( value ) );
     }
index 5179212..c80e0a6 100644 (file)
@@ -262,6 +262,13 @@ int main( int /*argc*/, char ** /*argv*/ )
     );
 
     // create a GraphicsPipeline
+    vk::ResultValue<vk::UniquePipeline> rv = device->createGraphicsPipelineUnique( *pipelineCache, graphicsPipelineCreateInfo );
+#if 17 <= VULKAN_HPP_CPP_VERSION
+    auto [r, v] = std::move( rv );
+#endif
+    // auto trv = rv.asTuple();    // asTuple() on an l-value is deprecated !!
+    auto trv1 = std::move( rv ).asTuple();
+
     vk::UniquePipeline graphicsPipeline = device->createGraphicsPipelineUnique( *pipelineCache, graphicsPipelineCreateInfo ).value;
 
     vk::UniquePipeline graphicsPipeline2 =
index 7cf1c62..82adb52 100644 (file)
@@ -6788,7 +6788,15 @@ namespace VULKAN_HPP_NAMESPACE
     {
     }
 
-    std::tuple<Result, UniqueHandle<Type, Dispatch>> asTuple()
+    VULKAN_HPP_DEPRECATED(
+      "asTuple() on an l-value is deprecated, as it implicitly moves the UniqueHandle out of the ResultValue. Use asTuple() on an r-value instead, requiring to explicitly move the UniqueHandle." )
+
+    std::tuple<Result, UniqueHandle<Type, Dispatch>> asTuple() &
+    {
+      return std::make_tuple( result, std::move( value ) );
+    }
+
+    std::tuple<Result, UniqueHandle<Type, Dispatch>> asTuple() &&
     {
       return std::make_tuple( result, std::move( value ) );
     }
@@ -6810,7 +6818,15 @@ namespace VULKAN_HPP_NAMESPACE
     {
     }
 
-    std::tuple<Result, std::vector<UniqueHandle<Type, Dispatch>>> asTuple()
+    VULKAN_HPP_DEPRECATED(
+      "asTuple() on an l-value is deprecated, as it implicitly moves the UniqueHandle out of the ResultValue. Use asTuple() on an r-value instead, requiring to explicitly move the UniqueHandle." )
+
+    std::tuple<Result, std::vector<UniqueHandle<Type, Dispatch>>> asTuple() &
+    {
+      return std::make_tuple( result, std::move( value ) );
+    }
+
+    std::tuple<Result, std::vector<UniqueHandle<Type, Dispatch>>> asTuple() &&
     {
       return std::make_tuple( result, std::move( value ) );
     }