From 99f33a2670694a1533c47ed0cf178945f3d3732f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Mon, 16 Nov 2020 13:07:12 +0100 Subject: [PATCH] Vk: make variadic extension type traits work for an empty list as well. --- src/Magnum/Vk/Test/ExtensionsTest.cpp | 6 ++++++ src/Magnum/Vk/TypeTraits.h | 2 ++ 2 files changed, 8 insertions(+) diff --git a/src/Magnum/Vk/Test/ExtensionsTest.cpp b/src/Magnum/Vk/Test/ExtensionsTest.cpp index 4e29d07e1..06967d7c9 100644 --- a/src/Magnum/Vk/Test/ExtensionsTest.cpp +++ b/src/Magnum/Vk/Test/ExtensionsTest.cpp @@ -81,6 +81,9 @@ void ExtensionsTest::isInstanceExtension() { Extensions::KHR::get_physical_device_properties2, Extensions::KHR::external_memory_capabilities, Extensions::KHR::external_fence>::value)); /* not */ + + /* Empty variadic list should return true */ + CORRADE_VERIFY(Implementation::IsInstanceExtension<>::value); } void ExtensionsTest::isExtension() { @@ -117,6 +120,9 @@ void ExtensionsTest::isExtension() { Extensions::KHR::external_memory, Extensions::KHR::depth_stencil_resolve, Extensions::KHR::external_fence_capabilities>::value)); /* not */ + + /* Empty variadic list should return true */ + CORRADE_VERIFY(Implementation::IsExtension<>::value); } void ExtensionsTest::constructInstanceExtensionFromCompileTimeExtension() { diff --git a/src/Magnum/Vk/TypeTraits.h b/src/Magnum/Vk/TypeTraits.h index ed14c25cb..304a0e98f 100644 --- a/src/Magnum/Vk/TypeTraits.h +++ b/src/Magnum/Vk/TypeTraits.h @@ -40,6 +40,7 @@ namespace Implementation { /** @todo filter out GL/AL extensions also */ template class IsInstanceExtension; + template<> class IsInstanceExtension<> { public: enum: bool { value = true }; }; CORRADE_HAS_TYPE(IsInstanceExtension, decltype(T::InstanceIndex)); template class IsInstanceExtension { /** @todo C++17: use &&... instead of all this */ @@ -47,6 +48,7 @@ namespace Implementation { }; template class IsExtension; + template<> class IsExtension<> { public: enum: bool { value = true }; }; CORRADE_HAS_TYPE(IsExtension, decltype(T::Index)); template class IsExtension { /** @todo C++17: use &&... instead of all this */