/* Copyright 2017 Glen Joseph Fernandes (glenjofe@gmail.com) Distributed under the Boost Software License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt) */ #include #include template class pointer { public: typedef typename boost::pointer_traits::element_type element_type; pointer(T value) : value_(value) { } T get() const BOOST_NOEXCEPT { return value_; } static pointer pointer_to(element_type& value) { return pointer(&value); } private: T value_; }; template inline bool operator==(const pointer& lhs, const pointer& rhs) BOOST_NOEXCEPT { return lhs.get() == rhs.get(); } int main() { int i = 0; { typedef int* type; type p = &i; BOOST_TEST(boost::pointer_traits::pointer_to(i) == p); } { typedef pointer type; type p(&i); BOOST_TEST(boost::pointer_traits::pointer_to(i) == p); } { typedef pointer > type; type p(&i); BOOST_TEST(boost::pointer_traits::pointer_to(i) == p); } { typedef const int* type; type p = &i; BOOST_TEST(boost::pointer_traits::pointer_to(i) == p); } { typedef pointer type; type p(&i); BOOST_TEST(boost::pointer_traits::pointer_to(i) == p); } return boost::report_errors(); }