mirror of
https://github.com/KhronosGroup/Vulkan-Hpp
synced 2024-11-08 13:40:08 +00:00
Add cast operator to reference of UniqueHandle of ResultValue<UniqueHandle>.
This commit is contained in:
parent
e83bd40ab5
commit
3724bfd0f5
@ -1 +1 @@
|
|||||||
Subproject commit 9d2dfca53b754dd3ab916899fed567a5290c30aa
|
Subproject commit f31524575668c6c483356bd54ca974590e31be8e
|
@ -7955,15 +7955,6 @@ namespace std
|
|||||||
template <typename Type, typename Dispatch>
|
template <typename Type, typename Dispatch>
|
||||||
struct ResultValue<UniqueHandle<Type,Dispatch>>
|
struct ResultValue<UniqueHandle<Type,Dispatch>>
|
||||||
{
|
{
|
||||||
#ifdef VULKAN_HPP_HAS_NOEXCEPT
|
|
||||||
ResultValue(Result r, UniqueHandle<Type, Dispatch> & v) VULKAN_HPP_NOEXCEPT
|
|
||||||
#else
|
|
||||||
ResultValue(Result r, UniqueHandle<Type, Dispatch>& v)
|
|
||||||
#endif
|
|
||||||
: result(r)
|
|
||||||
, value(v)
|
|
||||||
{}
|
|
||||||
|
|
||||||
#ifdef VULKAN_HPP_HAS_NOEXCEPT
|
#ifdef VULKAN_HPP_HAS_NOEXCEPT
|
||||||
ResultValue(Result r, UniqueHandle<Type, Dispatch> && v) VULKAN_HPP_NOEXCEPT
|
ResultValue(Result r, UniqueHandle<Type, Dispatch> && v) VULKAN_HPP_NOEXCEPT
|
||||||
#else
|
#else
|
||||||
@ -7978,6 +7969,11 @@ namespace std
|
|||||||
|
|
||||||
operator std::tuple<Result&, UniqueHandle<Type, Dispatch>&>() VULKAN_HPP_NOEXCEPT { return std::tuple<Result&, UniqueHandle<Type, Dispatch>&>(result, value); }
|
operator std::tuple<Result&, UniqueHandle<Type, Dispatch>&>() VULKAN_HPP_NOEXCEPT { return std::tuple<Result&, UniqueHandle<Type, Dispatch>&>(result, value); }
|
||||||
|
|
||||||
|
operator UniqueHandle<Type, Dispatch>& () & VULKAN_HPP_NOEXCEPT
|
||||||
|
{
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
operator UniqueHandle<Type, Dispatch>() VULKAN_HPP_NOEXCEPT
|
operator UniqueHandle<Type, Dispatch>() VULKAN_HPP_NOEXCEPT
|
||||||
{
|
{
|
||||||
return std::move(value);
|
return std::move(value);
|
||||||
|
@ -26,13 +26,9 @@ set(SOURCES
|
|||||||
source_group(headers FILES ${HEADERS})
|
source_group(headers FILES ${HEADERS})
|
||||||
source_group(sources FILES ${SOURCES})
|
source_group(sources FILES ${SOURCES})
|
||||||
|
|
||||||
add_library(ResultValue
|
add_executable(ResultValue
|
||||||
${HEADERS}
|
${HEADERS}
|
||||||
${SOURCES}
|
${SOURCES}
|
||||||
)
|
)
|
||||||
|
|
||||||
if (UNIX)
|
|
||||||
target_link_libraries(ResultValue "-ldl")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set_target_properties(ResultValue PROPERTIES FOLDER "Tests")
|
set_target_properties(ResultValue PROPERTIES FOLDER "Tests")
|
||||||
|
@ -21,34 +21,47 @@
|
|||||||
|
|
||||||
VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE
|
VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE
|
||||||
|
|
||||||
// Compile only test for issue 589.
|
void as_value( int ) {}
|
||||||
void test_conversion()
|
void as_ref( int & ) {}
|
||||||
{
|
void as_rvref( int && ) {}
|
||||||
#if defined(VULKAN_DISABLE_IMPLICIT_RESULT_VALUE_CAST)
|
void as_cref( const int & ) {}
|
||||||
static_assert(false, "Conversions not enabled");
|
void as_crvref( const int && ) {}
|
||||||
#endif
|
|
||||||
|
|
||||||
void as_value(int);
|
void as_cref( const vk::UniquePipeline & ) {}
|
||||||
void as_ref(int&);
|
|
||||||
void as_cref(const int&);
|
int main( int /*argc*/, char ** /*argv*/ )
|
||||||
void as_rvref(int&&);
|
{
|
||||||
void as_crvref(const int&&);
|
#if defined( VULKAN_DISABLE_IMPLICIT_RESULT_VALUE_CAST )
|
||||||
|
static_assert( false, "Conversions not enabled" );
|
||||||
|
#endif
|
||||||
|
|
||||||
using result = vk::ResultValue<int>;
|
using result = vk::ResultValue<int>;
|
||||||
|
|
||||||
auto val = result {vk::Result{}, 42};
|
auto val = result{ vk::Result{}, 42 };
|
||||||
const auto cval = result {vk::Result{}, 42};
|
const auto cval = result{ vk::Result{}, 42 };
|
||||||
|
|
||||||
as_value(val);
|
as_value( val );
|
||||||
as_value(cval);
|
as_value( cval );
|
||||||
|
|
||||||
as_ref(val);
|
as_ref( val );
|
||||||
//as_ref(cval); // should fail
|
// as_ref(cval); // should fail
|
||||||
as_cref(val);
|
as_cref( val );
|
||||||
as_cref(cval);
|
as_cref( cval );
|
||||||
|
|
||||||
as_rvref(std::move(val));
|
as_rvref( std::move( val ) );
|
||||||
//as_rvref(std::move(cval)); // should fail
|
// as_rvref(std::move(cval)); // should fail
|
||||||
as_crvref(std::move(val));
|
as_crvref( std::move( val ) );
|
||||||
as_crvref(std::move(cval));
|
as_crvref( std::move( cval ) );
|
||||||
|
|
||||||
|
vk::Pipeline pipe( VkPipeline( 0x8 ) ); // fake a Pipeline here, to have something different from zero
|
||||||
|
vk::UniquePipeline pipeline( pipe );
|
||||||
|
vk::ResultValue<vk::UniquePipeline> rv( {}, std::move( pipeline ) );
|
||||||
|
|
||||||
|
as_cref( rv ); // does not move out handle
|
||||||
|
assert( rv.value );
|
||||||
|
|
||||||
|
auto p = std::move( rv.value );
|
||||||
|
p.release(); // release the faked Pipeline, to prevent error on trying to destroy it
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -52,7 +52,7 @@
|
|||||||
# include <compare>
|
# include <compare>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static_assert( VK_HEADER_VERSION == 143, "Wrong VK_HEADER_VERSION!" );
|
static_assert( VK_HEADER_VERSION == 144, "Wrong VK_HEADER_VERSION!" );
|
||||||
|
|
||||||
// 32-bit vulkan is not typesafe for handles, so don't allow copy constructors on this platform by default.
|
// 32-bit vulkan is not typesafe for handles, so don't allow copy constructors on this platform by default.
|
||||||
// To enable this feature on 32-bit platforms please define VULKAN_HPP_TYPESAFE_CONVERSION
|
// To enable this feature on 32-bit platforms please define VULKAN_HPP_TYPESAFE_CONVERSION
|
||||||
@ -15887,15 +15887,6 @@ namespace VULKAN_HPP_NAMESPACE
|
|||||||
template <typename Type, typename Dispatch>
|
template <typename Type, typename Dispatch>
|
||||||
struct ResultValue<UniqueHandle<Type, Dispatch>>
|
struct ResultValue<UniqueHandle<Type, Dispatch>>
|
||||||
{
|
{
|
||||||
# ifdef VULKAN_HPP_HAS_NOEXCEPT
|
|
||||||
ResultValue( Result r, UniqueHandle<Type, Dispatch> & v ) VULKAN_HPP_NOEXCEPT
|
|
||||||
# else
|
|
||||||
ResultValue( Result r, UniqueHandle<Type, Dispatch> & v )
|
|
||||||
# endif
|
|
||||||
: result( r )
|
|
||||||
, value( v )
|
|
||||||
{}
|
|
||||||
|
|
||||||
# ifdef VULKAN_HPP_HAS_NOEXCEPT
|
# ifdef VULKAN_HPP_HAS_NOEXCEPT
|
||||||
ResultValue( Result r, UniqueHandle<Type, Dispatch> && v ) VULKAN_HPP_NOEXCEPT
|
ResultValue( Result r, UniqueHandle<Type, Dispatch> && v ) VULKAN_HPP_NOEXCEPT
|
||||||
# else
|
# else
|
||||||
@ -15913,6 +15904,11 @@ namespace VULKAN_HPP_NAMESPACE
|
|||||||
return std::tuple<Result &, UniqueHandle<Type, Dispatch> &>( result, value );
|
return std::tuple<Result &, UniqueHandle<Type, Dispatch> &>( result, value );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
operator UniqueHandle<Type, Dispatch> &() & VULKAN_HPP_NOEXCEPT
|
||||||
|
{
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
operator UniqueHandle<Type, Dispatch>() VULKAN_HPP_NOEXCEPT
|
operator UniqueHandle<Type, Dispatch>() VULKAN_HPP_NOEXCEPT
|
||||||
{
|
{
|
||||||
return std::move( value );
|
return std::move( value );
|
||||||
|
Loading…
Reference in New Issue
Block a user