#pragma once namespace pointers { namespace detail { template struct get_ptr { decltype(std::declval

().get()) get(P const & ptr) const { return std::addressof(*ptr); } }; template struct get_ptr> { void get(std::weak_ptr const & ptr) throw(); }; template struct get_ptr { T * get(T * ptr) const { return ptr; } }; template struct get_ptr().get())>::value>::type> { decltype(std::declval

().get()) get(P const & ptr) const { return ptr.get(); } }; }}