#pragma once #include #include #include namespace Feather { template class Lockable { public: auto borrow() { return std::pair< T&, std::lock_guard>{object, mutex}; } auto borrow() const { return std::pair>{object, mutex}; } private: T object; mutable std::mutex mutex; }; template using LockableVector = Lockable>; template using LockableList = Lockable>; }