From: "Peter Dimov" <pdimov@mmltd.net >
intrusive_ptr_add_ref is passed a pointer to a class with an embedded
reference count. It doesn't matter how many typedefs resolve to X*, X still
has its reference count that needs to be incremented.

You only run into the problem when "assign" is underspecified and overloaded
to mean different things in different contexts.


I understand your point, and maybe it is not a problem for intrusive_ptr in all pratical cases, but intrusive_ptr_add_ref is passed a T *.  T may or may NOT be a class.   ie T could be an int or an HWND (which is often just void *, depending on #define STRICT) or some other handle, or whatever.  Maybe all those examples are a bit ugly - ie the int would have to be something like an index into a global array, or something like that.  But it is not necessarily a distinct 'class' that holds its refcount intrinsicly.  Or maybe it is necessarily that, but only because of how intrusive_ptr_add_ref was done, not for any other reason.  So intrusive_ptr is ever so slightly more restrictive than it need be.  Probably not a big deal.

Note also, that for those few strange cases, you could also just wrap the HWND or whatever into a class, but then of course, intrusive_ptr could have just required the class to have a specific add_ref member function (and then you might need to wrap all classes).

So maybe intrusive_ptr is just an example and not necessarily the best one, but I still wonder

1. if policy based could have been the same for 95% of the cases, and better for the last 5%,
2. there are any other techniques to consider.  Either for intrusive_ptr or boost iterators or other places where I want to use the same techniques.  I think that's the real question - if I am going to borrow some idioms for boost or wherever, I'd like to borrow the right ones for the right situations.


Tony