Using boost::adaptors::indirected with a custom templated smart pointer failed compilation due to missing MyCustomSmartPointer::element_type typedef. Indeed supplying this typedef, all compiles and tests run.
Is this the canonical approach to making a compatible pointer type usable with range? Is this specific to range only? Will this make my custom smart pointer 'more' compatible with other boost/std facilities?