From 1b210355bfd3b25250cee56bbf10e7d757b9d611 Mon Sep 17 00:00:00 2001 From: Jeremy Siek Date: Sun, 11 Jan 2004 17:27:59 +0000 Subject: [PATCH] added bodies to functions to prevent linker errors [SVN r21600] --- .../boost/iterator/iterator_archetypes.hpp | 65 ++++++++++--------- 1 file changed, 36 insertions(+), 29 deletions(-) diff --git a/include/boost/iterator/iterator_archetypes.hpp b/include/boost/iterator/iterator_archetypes.hpp index 5fbdf10..0685803 100644 --- a/include/boost/iterator/iterator_archetypes.hpp +++ b/include/boost/iterator/iterator_archetypes.hpp @@ -19,6 +19,8 @@ #include #include +#include + #include #include #include @@ -80,26 +82,26 @@ namespace detail template struct assign_proxy { - assign_proxy& operator=(T); + assign_proxy& operator=(T) { return *this; } }; template struct read_proxy { - operator T(); + operator T() { return static_object::get(); } }; template struct read_write_proxy : read_proxy // Use to inherit from assign_proxy, but that doesn't work. -JGS { - read_write_proxy& operator=(T); + read_write_proxy& operator=(T) { return *this; } }; template struct arrow_proxy { - T const* operator->() const; + T const* operator->() const { return 0; } }; struct no_operator_brackets {}; @@ -107,13 +109,13 @@ namespace detail template struct readable_operator_brackets { - read_proxy operator[](std::ptrdiff_t n) const; + read_proxy operator[](std::ptrdiff_t n) const { return read_proxy(); } }; template struct writable_operator_brackets { - read_write_proxy operator[](std::ptrdiff_t n) const; + read_write_proxy operator[](std::ptrdiff_t n) const { return read_write_proxy(); } }; template @@ -160,10 +162,11 @@ namespace detail template struct archetype { - typedef void difference_type; + struct bogus { }; // This use to be void, but that causes trouble for iterator_facade. Need more research. -JGS + typedef bogus difference_type; - Derived& operator++(); - Derived operator++(int) const; + Derived& operator++() { return (Derived&)static_object::get(); } + Derived operator++(int) const { return (Derived&)static_object::get(); } }; }; @@ -180,13 +183,13 @@ namespace detail template bool operator==(traversal_archetype_ const&, - traversal_archetype_ const&); + traversal_archetype_ const&) { return true; } #if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) // doesn't seem to pick up != from equality_comparable template bool operator!=(traversal_archetype_ const&, - traversal_archetype_ const&); + traversal_archetype_ const&) { return true; } #endif template <> struct traversal_archetype_impl @@ -206,8 +209,8 @@ namespace detail struct archetype : public traversal_archetype_ { - Derived& operator--(); - Derived operator--(int) const; + Derived& operator--() { return static_object::get(); } + Derived operator--(int) const { return static_object::get(); } }; }; @@ -219,30 +222,34 @@ namespace detail : public partially_ordered >, public traversal_archetype_ { - Derived& operator+=(std::ptrdiff_t); - Derived& operator-=(std::ptrdiff_t); + Derived& operator+=(std::ptrdiff_t) { return static_object::get(); } + Derived& operator-=(std::ptrdiff_t) { return static_object::get(); } }; }; template Derived& operator+(traversal_archetype_ const&, - std::ptrdiff_t); + std::ptrdiff_t) { return static_object::get(); } template Derived& operator+(std::ptrdiff_t, - traversal_archetype_ const&); + traversal_archetype_ const&) + { return static_object::get(); } template Derived& operator-(traversal_archetype_ const&, - std::ptrdiff_t); + std::ptrdiff_t) + { return static_object::get(); } template std::ptrdiff_t operator-(traversal_archetype_ const&, - traversal_archetype_ const&); + traversal_archetype_ const&) + { return 0; } template bool operator<(traversal_archetype_ const&, - traversal_archetype_ const&); + traversal_archetype_ const&) + { return true; } struct bogus_type; @@ -286,9 +293,9 @@ struct iterator_access_archetype_impl< typedef Value reference; typedef Value* pointer; - value_type operator*() const; + value_type operator*() const { return static_object::get(); } - detail::arrow_proxy operator->() const; + detail::arrow_proxy operator->() const { return detail::arrow_proxy(); } }; }; @@ -307,7 +314,7 @@ struct iterator_access_archetype_impl< typedef void reference; typedef void pointer; - detail::assign_proxy operator*() const; + detail::assign_proxy operator*() const { return detail::assign_proxy(); } }; }; @@ -324,7 +331,7 @@ struct iterator_access_archetype_impl< { typedef detail::read_write_proxy reference; - detail::read_write_proxy operator*() const; + detail::read_write_proxy operator*() const { return detail::read_write_proxy(); } }; }; @@ -339,8 +346,8 @@ struct iterator_access_archetype_impl() const; + Value& operator*() const { return static_object::get(); } + Value* operator->() const { return 0; } }; }; @@ -443,10 +450,10 @@ struct iterator_archetype typedef typename base::iterator_category iterator_category; # endif - iterator_archetype(); - iterator_archetype(iterator_archetype const&); + iterator_archetype() { } + iterator_archetype(iterator_archetype const&) { } - iterator_archetype& operator=(iterator_archetype const&); + iterator_archetype& operator=(iterator_archetype const&) { return *this; } // Optional conversion from mutable // iterator_archetype(iterator_archetype::type, AccessCategory, TraversalCategory> const&);