diff --git a/snippets/StructureChain.hpp b/snippets/StructureChain.hpp index 8aa535ff6..c1d9d00db 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 455183e05..0f5f02d42 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 c6283c0ba..38514d791 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;