#pragma once #include namespace mbgl { namespace util { namespace impl { class ThreadLocalBase { protected: ThreadLocalBase(); ~ThreadLocalBase(); void* get(); void set(void*); private: std::aligned_storage_t storage; }; } // namespace impl template class ThreadLocal : public impl::ThreadLocalBase { public: ThreadLocal() = default; ThreadLocal(T* val) { set(val); } T* get() { return reinterpret_cast(impl::ThreadLocalBase::get()); } void set(T* ptr) { impl::ThreadLocalBase::set(ptr); } }; } // namespace util } // namespace mbgl