123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- /*
- 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 <boost/core/pointer_traits.hpp>
- #include <boost/core/lightweight_test.hpp>
- template<class T>
- class pointer {
- public:
- typedef typename boost::pointer_traits<T>::element_type element_type;
- pointer(T value)
- : value_(value) { }
- T get() const BOOST_NOEXCEPT {
- return value_;
- }
- static pointer<T> pointer_to(element_type& value) {
- return pointer<T>(&value);
- }
- private:
- T value_;
- };
- template<class T>
- inline bool
- operator==(const pointer<T>& lhs, const pointer<T>& rhs) BOOST_NOEXCEPT
- {
- return lhs.get() == rhs.get();
- }
- int main()
- {
- int i = 0;
- {
- typedef int* type;
- type p = &i;
- BOOST_TEST(boost::pointer_traits<type>::pointer_to(i) == p);
- }
- {
- typedef pointer<int*> type;
- type p(&i);
- BOOST_TEST(boost::pointer_traits<type>::pointer_to(i) == p);
- }
- {
- typedef pointer<pointer<int*> > type;
- type p(&i);
- BOOST_TEST(boost::pointer_traits<type>::pointer_to(i) == p);
- }
- {
- typedef const int* type;
- type p = &i;
- BOOST_TEST(boost::pointer_traits<type>::pointer_to(i) == p);
- }
- {
- typedef pointer<const int*> type;
- type p(&i);
- BOOST_TEST(boost::pointer_traits<type>::pointer_to(i) == p);
- }
- return boost::report_errors();
- }
|