diff --git a/modules/juce_core/native/juce_win32_ComSmartPtr.h b/modules/juce_core/native/juce_win32_ComSmartPtr.h index cb951cde8c..1c22d254da 100644 --- a/modules/juce_core/native/juce_win32_ComSmartPtr.h +++ b/modules/juce_core/native/juce_win32_ComSmartPtr.h @@ -200,29 +200,29 @@ template class ComBaseClassHelper : public ComBaseClassHelperBase { public: - ComBaseClassHelper (unsigned int initialRefCount = 1) : ComBaseClassHelperBase (initialRefCount) {} + explicit ComBaseClassHelper (unsigned int initialRefCount = 1) + : ComBaseClassHelperBase (initialRefCount) {} JUCE_COMRESULT QueryInterface (REFIID refId, void** result) { - return queryInterfaceWithType (refId, result, Tag{}...); - } + const std::tuple bases[] + { + std::make_tuple (__uuidof (ComClasses), + static_cast (static_cast (this)))... + }; + + for (const auto& base : bases) + { + if (refId == std::get<0> (base)) + { + this->AddRef(); + *result = std::get<1> (base); + return S_OK; + } + } -private: - JUCE_COMRESULT queryInterfaceWithType (REFIID refId, void** result) - { return ComBaseClassHelperBase::QueryInterface (refId, result); } - - template struct Tag {}; - - template - JUCE_COMRESULT queryInterfaceWithType (REFIID refId, void** result, Tag, Tag...) - { - if (refId == __uuidof (T)) - return this->template castToType (result); - - return queryInterfaceWithType (refId, result, Tag{}...); - } }; JUCE_END_IGNORE_WARNINGS_GCC_LIKE