diff options
Diffstat (limited to 'src/boost/libs/foreach/test/user_defined.cpp')
-rw-r--r-- | src/boost/libs/foreach/test/user_defined.cpp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/boost/libs/foreach/test/user_defined.cpp b/src/boost/libs/foreach/test/user_defined.cpp new file mode 100644 index 00000000..a05bf3a6 --- /dev/null +++ b/src/boost/libs/foreach/test/user_defined.cpp @@ -0,0 +1,54 @@ +// (C) Copyright Eric Niebler 2005. +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +/* +Revision history: +25 August 2005 : Initial version. +*/ + +#include <boost/test/minimal.hpp> + +/////////////////////////////////////////////////////////////////////////////// +// define a user-defined collection type and teach BOOST_FOREACH how to enumerate it +// +namespace mine +{ + struct dummy {}; + char * range_begin(mine::dummy&) {return 0;} + char const * range_begin(mine::dummy const&) {return 0;} + char * range_end(mine::dummy&) {return 0;} + char const * range_end(mine::dummy const&) {return 0;} +} + +#include <boost/foreach.hpp> + +namespace boost +{ + template<> + struct range_mutable_iterator<mine::dummy> + { + typedef char * type; + }; + template<> + struct range_const_iterator<mine::dummy> + { + typedef char const * type; + }; +} + +/////////////////////////////////////////////////////////////////////////////// +// test_main +// +int test_main( int, char*[] ) +{ + // loop over a user-defined type (just make sure this compiles) + mine::dummy d; + BOOST_FOREACH( char c, d ) + { + ((void)c); // no-op + } + + return 0; +} |