
Eric Niebler wrote:
get a pointer to the mutex from the scoped_lock. You should get back a token or a void* that is useful only for comparison purposes.
It just came to my mind that if we decide to add common base class, such void* could be returned there. Thus it would look something like: class lock { bool* active_; void* mutex_; protected: ~lock() {} // no-op lock(bool* active, void* mutex) : active_(active), mutex_(mutex) {assert(active_ != NULL); assert(mutex_ != NULL);} lock(const lock& src) : active_(src.active_) {assert(src.mutex_ == mutex_);} public: bool active() const {return *active_;} void* mutex() const {return mutex_;} // or just polymorphic functions: // virtual bool active() const = 0; // virtual void* mutex() const = 0; operator safe_bool() const {return active() ? safe_true : safe_false;} }; Actually "mutex" can be renamed here to "handle" or "primitive" ... B.