1 // last_value function object (documented as part of Boost.Signals) 2 3 // Copyright Douglas Gregor 2001-2003. Use, modification and 4 // distribution is subject to the Boost Software License, Version 5 // 1.0. (See accompanying file LICENSE_1_0.txt or copy at 6 // http://www.boost.org/LICENSE_1_0.txt) 7 8 // For more information, see http://www.boost.org/libs/signals 9 10 #ifndef BOOST_LAST_VALUE_HPP 11 #define BOOST_LAST_VALUE_HPP 12 13 #include <cassert> 14 15 namespace boost { 16 template<typename T> 17 struct last_value { 18 typedef T result_type; 19 20 template<typename InputIterator> operator ()boost::last_value21 T operator()(InputIterator first, InputIterator last) const 22 { 23 assert(first != last); 24 T value = *first++; 25 while (first != last) 26 value = *first++; 27 return value; 28 } 29 }; 30 31 template<> 32 struct last_value<void> { 33 struct unusable {}; 34 35 public: 36 typedef unusable result_type; 37 38 template<typename InputIterator> 39 result_type operator ()boost::last_value40 operator()(InputIterator first, InputIterator last) const 41 { 42 while (first != last) 43 *first++; 44 return result_type(); 45 } 46 }; 47 } 48 #endif // BOOST_SIGNALS_LAST_VALUE_HPP 49