Browse Source

Vk: make variadic extension type traits work for an empty list as well.

pull/234/head
Vladimír Vondruš 6 years ago
parent
commit
99f33a2670
  1. 6
      src/Magnum/Vk/Test/ExtensionsTest.cpp
  2. 2
      src/Magnum/Vk/TypeTraits.h

6
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() {

2
src/Magnum/Vk/TypeTraits.h

@ -40,6 +40,7 @@ namespace Implementation {
/** @todo filter out GL/AL extensions also */
template<class...> class IsInstanceExtension;
template<> class IsInstanceExtension<> { public: enum: bool { value = true }; };
CORRADE_HAS_TYPE(IsInstanceExtension<U>, decltype(T::InstanceIndex));
template<class T, class U, class ...Args> class IsInstanceExtension<T, U, Args...> {
/** @todo C++17: use &&... instead of all this */
@ -47,6 +48,7 @@ namespace Implementation {
};
template<class...> class IsExtension;
template<> class IsExtension<> { public: enum: bool { value = true }; };
CORRADE_HAS_TYPE(IsExtension<U>, decltype(T::Index));
template<class T, class U, class ...Args> class IsExtension<T, U, Args...> {
/** @todo C++17: use &&... instead of all this */

Loading…
Cancel
Save