Hello all, I am trying to specialize boost::is_pointer so, that it can determine if a type is a pointer wrapper (shared_ptr, auto_ptr, weak_ptr). Does anybody has ideas how this can be done? May be it would be possible to handle if e.g. one can determine if a class/struct has some typedef inside: template<...> class shared_ptr { typedef ... element_type; }; class some_other_class { typedef ... type; }; class some_other_class2 { //no typedef... }; Somehow I am not certain if I am on the right path. My problem is that I have a variant container type with different types. One could access a value using -> operator. The operator returns the pointer to the value. But if this value is a pointer (that can be determined by boost::is_pointer type trait) it should return the pointer and not pointer to pointer value. Now what happens if I store shared_ptr or any other type which overload -> operator? This will result in compiler error, because the compiler tries to access member of the pointer to pointer and not of the pointer instance. Is there may be a way to determine if the member access operator is overloaded? What if -> operator is defined in the base? And what if child class inherits base as protected or private? The other solution would be to force every user to write a specialized class is_pointer for every type stored in variant, but this would be not so nice. With Kind Regards, Ovanes Markarian