From 389d1250cd7b8c686da4d00dfe563a9ade260736 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20S=C3=BC=C3=9Fenbach?= Date: Thu, 22 Jun 2023 14:02:39 +0200 Subject: [PATCH] Add specializations of std::tuple_element and std::tuple_size for vk::StructureChain. (#1602) --- snippets/StructureChain.hpp | 20 ++++++++++++++++++++ tests/StructureChain/StructureChain.cpp | 10 ++++++++-- vulkan/vulkan.hpp | 21 +++++++++++++++++++++ 3 files changed, 49 insertions(+), 2 deletions(-) diff --git a/snippets/StructureChain.hpp b/snippets/StructureChain.hpp index 8aa535f..c1d9d00 100644 --- a/snippets/StructureChain.hpp +++ b/snippets/StructureChain.hpp @@ -244,3 +244,23 @@ } } }; + // interupt the VULKAN_HPP_NAMESPACE for a moment to add specializations of std::tuple_size and std::tuple_element for the StructureChain! +} + +namespace std +{ + template + struct tuple_size> + { + static constexpr size_t value = std::tuple_size>::value; + }; + + template + struct tuple_element> + { + using type = typename std::tuple_element>::type; + }; +} // namespace std + +namespace VULKAN_HPP_NAMESPACE +{ diff --git a/tests/StructureChain/StructureChain.cpp b/tests/StructureChain/StructureChain.cpp index 455183e..0f5f02d 100644 --- a/tests/StructureChain/StructureChain.cpp +++ b/tests/StructureChain/StructureChain.cpp @@ -67,13 +67,19 @@ int main( int /*argc*/, char ** /*argv*/ ) vk::PhysicalDevicePushDescriptorPropertiesKHR> sc7; -#if !defined(NDEBUG) +#if ( 17 <= VULKAN_HPP_CPP_VERSION ) + // test for structured binding from a StructureChain + auto const & [p0, p1] = sc1; + auto & [p2, p3] = sc2; +#endif + +#if !defined( NDEBUG ) void * pNext = sc7.get().pNext; #endif sc7.assign( {} ); assert( pNext == sc7.get().pNext ); -#if !defined(NDEBUG) +#if !defined( NDEBUG ) void * pNext1 = sc7.get().pNext; #endif sc7.assign( {} ).assign( {} ); diff --git a/vulkan/vulkan.hpp b/vulkan/vulkan.hpp index c6283c0..38514d7 100644 --- a/vulkan/vulkan.hpp +++ b/vulkan/vulkan.hpp @@ -1181,6 +1181,27 @@ namespace VULKAN_HPP_NAMESPACE } }; + // interupt the VULKAN_HPP_NAMESPACE for a moment to add specializations of std::tuple_size and std::tuple_element for the StructureChain! +} + +namespace std +{ + template + struct tuple_size> + { + static constexpr size_t value = std::tuple_size>::value; + }; + + template + struct tuple_element> + { + using type = typename std::tuple_element>::type; + }; +} // namespace std + +namespace VULKAN_HPP_NAMESPACE +{ + # if !defined( VULKAN_HPP_NO_SMART_HANDLE ) template class UniqueHandleTraits;