diff --git a/src/ResourceManager.h b/src/ResourceManager.h index b00732199..3935815ea 100644 --- a/src/ResourceManager.h +++ b/src/ResourceManager.h @@ -453,8 +453,8 @@ template class ResourceManager: protected Implementation::Resour public: /** @brief Global instance */ inline static ResourceManager* instance() { - CORRADE_ASSERT(_instance, "ResourceManager::instance(): no instance exists", nullptr); - return _instance; + CORRADE_ASSERT(internalInstance(), "ResourceManager::instance(): no instance exists", nullptr); + return internalInstance(); } /** @@ -466,8 +466,8 @@ template class ResourceManager: protected Implementation::Resour * @see instance() */ inline ResourceManager() { - CORRADE_ASSERT(!_instance, "ResourceManager::ResourceManager(): another instance is already created", ); - _instance = this; + CORRADE_ASSERT(!internalInstance(), "ResourceManager::ResourceManager(): another instance is already created", ); + internalInstance() = this; } /** @@ -477,8 +477,8 @@ template class ResourceManager: protected Implementation::Resour * @see instance() */ inline ~ResourceManager() { - CORRADE_INTERNAL_ASSERT(_instance == this); - _instance = nullptr; + CORRADE_INTERNAL_ASSERT(internalInstance() == this); + internalInstance() = nullptr; } /** @brief Count of resources of given type */ @@ -564,16 +564,19 @@ template class ResourceManager: protected Implementation::Resour } inline void freeInternal() const {} - static ResourceManager* _instance; + static ResourceManager*& internalInstance(); }; +template ResourceManager*& ResourceManager::internalInstance() { + static ResourceManager* _instance(nullptr); + return _instance; +} + /** @debugoperator{Magnum::ResourceKey} */ template inline Corrade::Utility::Debug operator<<(Corrade::Utility::Debug debug, const ResourceKey& value) { return debug << static_cast&>(value); } -template ResourceManager* ResourceManager::_instance(nullptr); - } #endif