1
2 // Copyright Aleksey Gurtovoy 2000-2004
3 //
4 // Distributed under the Boost Software License, Version 1.0.
5 // (See accompanying file LICENSE_1_0.txt or copy at
6 // http://www.boost.org/LICENSE_1_0.txt)
7 //
8 // See http://www.boost.org/libs/mpl for documentation.
9
10 // $Id$
11 // $Date$
12 // $Revision$
13
14 #include <boost/mpl/advance.hpp>
15 #include <boost/mpl/iterator_tags.hpp>
16 #include <boost/mpl/aux_/test.hpp>
17
18 template< int pos > struct iter
19 {
20 typedef mpl::bidirectional_iterator_tag category;
21 typedef iter<(pos + 1)> next;
22 typedef iter<(pos - 1)> prior;
23 typedef int_<pos> type;
24 };
25
26 #if BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3003))
27 namespace boost { namespace mpl {
28 template< int pos, typename Default > struct tag< iter<pos>,Default > : void_ {};
29 }}
30 #endif
31
32 typedef iter<0> first;
33 typedef iter<10> last;
34
MPL_TEST_CASE()35 MPL_TEST_CASE()
36 {
37 typedef mpl::advance<first,int_<10> >::type iter1;
38 typedef advance_c<first,10>::type iter2;
39
40 MPL_ASSERT(( is_same<iter1, last> ));
41 MPL_ASSERT(( is_same<iter2, last> ));
42 }
43
MPL_TEST_CASE()44 MPL_TEST_CASE()
45 {
46 typedef mpl::advance<last,int_<-10> >::type iter1;
47 typedef advance_c<last,-10>::type iter2;
48
49 MPL_ASSERT(( is_same<iter1, first> ));
50 MPL_ASSERT(( is_same<iter2, first> ));
51 }
52