2004-01-29 05:55:26 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								<?xml version="1.0" encoding="utf-8" ?>  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< html  xmlns = "http://www.w3.org/1999/xhtml"  xml:lang = "en"  lang = "en" >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< head >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< meta  http-equiv = "Content-Type"  content = "text/html; charset=utf-8"  / >  
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< meta  name = "generator"  content = "Docutils 0.5: http://docutils.sourceforge.net/"  / >  
						 
					
						
							
								
									
										
										
										
											2004-01-29 05:55:26 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< title > Iterator Traits< / title >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< meta  name = "author"  content = "David Abrahams"  / >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< meta  name = "organization"  content = "Boost Consulting"  / >  
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< meta  name = "date"  content = "2006-09-11"  / >  
						 
					
						
							
								
									
										
										
										
											2004-11-02 14:31:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< meta  name = "copyright"  content = "Copyright David Abrahams 2004."  / >  
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< link  rel = "stylesheet"  href = "../../../rst.css"  type = "text/css"  / >  
						 
					
						
							
								
									
										
										
										
											2004-01-29 05:55:26 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< / head >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< body >  
						 
					
						
							
								
									
										
										
										
											2005-05-20 15:32:55 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< div  class = "document"  id = "iterator-traits" >  
						 
					
						
							
								
									
										
										
										
											2004-01-29 05:55:26 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< h1  class = "title" > Iterator Traits< / h1 >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< table  class = "docinfo"  frame = "void"  rules = "none" >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< col  class = "docinfo-name"  / >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< col  class = "docinfo-content"  / >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< tbody  valign = "top" >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< tr > < th  class = "docinfo-name" > Author:< / th >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< td > David Abrahams< / td > < / tr >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< tr > < th  class = "docinfo-name" > Contact:< / th >  
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< td > < a  class = "first last reference external"  href = "mailto:dave@boost-consulting.com" > dave@ boost-consulting.com< / a > < / td > < / tr >  
						 
					
						
							
								
									
										
										
										
											2004-01-29 05:55:26 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< tr > < th  class = "docinfo-name" > Organization:< / th >  
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< td > < a  class = "first last reference external"  href = "http://www.boost-consulting.com" > Boost Consulting< / a > < / td > < / tr >  
						 
					
						
							
								
									
										
										
										
											2004-01-29 05:55:26 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< tr > < th  class = "docinfo-name" > Date:< / th >  
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< td > 2006-09-11< / td > < / tr >  
						 
					
						
							
								
									
										
										
										
											2004-01-29 05:55:26 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< tr > < th  class = "docinfo-name" > Copyright:< / th >  
						 
					
						
							
								
									
										
										
										
											2004-11-02 14:31:27 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< td > Copyright David Abrahams 2004.< / td > < / tr >  
						 
					
						
							
								
									
										
										
										
											2004-01-29 05:55:26 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< / tbody >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< / table >  
						 
					
						
							
								
									
										
										
										
											2006-09-11 22:08:18 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								<!--  Distributed under 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)  -->  
						 
					
						
							
								
									
										
										
										
											2005-05-20 15:32:55 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< table  class = "docutils field-list"  frame = "void"  rules = "none" >  
						 
					
						
							
								
									
										
										
										
											2004-01-29 05:55:26 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< col  class = "field-name"  / >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< col  class = "field-body"  / >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< tbody  valign = "top" >  
						 
					
						
							
								
									
										
										
										
											2005-05-20 15:32:55 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< tr  class = "field" > < th  class = "field-name" > abstract:< / th > < td  class = "field-body" > Header < tt  class = "docutils literal" > < span  class = "pre" > < boost/iterator/iterator_traits.hpp> < / span > < / tt >  provides 
						 
					
						
							
								
									
										
										
										
											2004-01-29 05:55:26 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								the ability to access an iterator's associated types using
							 
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								MPL-compatible < a  class = "reference external"  href = "../../mpl/doc/index.html#metafunctions" > metafunctions< / a > .< / td > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-29 05:55:26 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< / tr >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< / tbody >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< / table >  
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< div  class = "section"  id = "overview" >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< h1 > Overview< / h1 >  
						 
					
						
							
								
									
										
										
										
											2005-05-20 15:32:55 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< p > < tt  class = "docutils literal" > < span  class = "pre" > std::iterator_traits< / span > < / tt >  provides access to five associated types 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								of any iterator: its < tt  class = "docutils literal" > < span  class = "pre" > value_type< / span > < / tt > , < tt  class = "docutils literal" > < span  class = "pre" > reference< / span > < / tt > , < tt  class = "docutils literal" > < span  class = "pre" > pointer< / span > < / tt > ,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< tt  class = "docutils literal" > < span  class = "pre" > iterator_category< / span > < / tt > , and < tt  class = "docutils literal" > < span  class = "pre" > difference_type< / span > < / tt > .  Unfortunately, 
						 
					
						
							
								
									
										
										
										
											2004-01-29 05:55:26 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								such a " multi-valued"  traits template can be difficult to use in a
							 
						 
					
						
							
								
									
										
										
										
											2005-05-20 15:32:55 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								metaprogramming context.  < tt  class = "docutils literal" > < span  class = "pre" > < boost/iterator/iterator_traits.hpp> < / span > < / tt > 
							 
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								provides access to these types using a standard < a  class = "reference external"  href = "../../mpl/doc/index.html#metafunctions" > metafunctions< / a > .< / p > 
							 
						 
					
						
							
								
									
										
										
										
											2004-01-29 05:55:26 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< / div >  
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< div  class = "section"  id = "summary" >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< h1 > Summary< / h1 >  
						 
					
						
							
								
									
										
										
										
											2005-05-20 15:32:55 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< p > Header < tt  class = "docutils literal" > < span  class = "pre" > < boost/iterator/iterator_traits.hpp> < / span > < / tt > :< / p >  
						 
					
						
							
								
									
										
										
										
											2004-01-29 05:55:26 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< pre  class = "literal-block" >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								template < class Iterator> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								struct iterator_value
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{
							 
						 
					
						
							
								
									
										
										
										
											2006-09-11 22:08:18 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    typedef typename
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      std::iterator_traits< Iterator> ::value_type
							 
						 
					
						
							
								
									
										
										
										
											2004-01-29 05:55:26 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    type;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								};
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								template < class Iterator> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								struct iterator_reference
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{
							 
						 
					
						
							
								
									
										
										
										
											2006-09-11 22:08:18 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    typedef typename
							 
						 
					
						
							
								
									
										
										
										
											2004-01-29 05:55:26 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								      std::iterator_traits< Iterator> ::reference
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    type;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								};
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								template < class Iterator> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								struct iterator_pointer
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{
							 
						 
					
						
							
								
									
										
										
										
											2006-09-11 22:08:18 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    typedef typename
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      std::iterator_traits< Iterator> ::pointer
							 
						 
					
						
							
								
									
										
										
										
											2004-01-29 05:55:26 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    type;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								};
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								template < class Iterator> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								struct iterator_difference
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    typedef typename
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      detail::iterator_traits< Iterator> ::difference_type
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    type;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								};
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								template < class Iterator> 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								struct iterator_category
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								{
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    typedef typename
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      detail::iterator_traits< Iterator> ::iterator_category
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    type;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								};
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< / pre >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< / div >  
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< div  class = "section"  id = "broken-compiler-notes" >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< h1 > Broken Compiler Notes< / h1 >  
						 
					
						
							
								
									
										
										
										
											2004-01-29 05:55:26 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< p > Because of workarounds in Boost, you may find that these 
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< a  class = "reference external"  href = "../../mpl/doc/index.html#metafunctions" > metafunctions< / a >  actually work better than the facilities provided by 
						 
					
						
							
								
									
										
										
										
											2004-01-29 05:55:26 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								your compiler's standard library.< / p > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< p > On compilers that don't support partial specialization, such as 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Microsoft Visual C++ 6.0 or 7.0, you may need to manually invoke
							 
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< a  class = "reference external"  href = "../../type_traits/index.html#transformations" > BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION< / a >  on the 
						 
					
						
							
								
									
										
										
										
											2005-05-20 15:32:55 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< tt  class = "docutils literal" > < span  class = "pre" > value_type< / span > < / tt >  of pointers that are passed to these metafunctions.< / p >  
						 
					
						
							
								
									
										
										
										
											2004-01-29 05:55:26 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< p > Because of bugs in the implementation of GCC-2.9x, the name of 
						 
					
						
							
								
									
										
										
										
											2005-05-20 15:32:55 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< tt  class = "docutils literal" > < span  class = "pre" > iterator_category< / span > < / tt >  is changed to < tt  class = "docutils literal" > < span  class = "pre" > iterator_category_< / span > < / tt >  on that 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								compiler.  A macro, < tt  class = "docutils literal" > < span  class = "pre" > BOOST_ITERATOR_CATEGORY< / span > < / tt > , that expands to
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								either < tt  class = "docutils literal" > < span  class = "pre" > iterator_category< / span > < / tt >  or < tt  class = "docutils literal" > < span  class = "pre" > iterator_category_< / span > < / tt > , as
							 
						 
					
						
							
								
									
										
										
										
											2004-01-29 05:55:26 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								appropriate to the platform, is provided for portability.< / p > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< / div >  
						 
					
						
							
								
									
										
										
										
											2007-11-03 03:25:13 +00:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								< / div >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< div  class = "footer" >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< hr  class = "footer"  / >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< a  class = "reference external"  href = "iterator_traits.rst" > View document source< / a > . 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Generated by < a  class = "reference external"  href = "http://docutils.sourceforge.net/" > Docutils< / a >  from < a  class = "reference external"  href = "http://docutils.sourceforge.net/rst.html" > reStructuredText< / a >  source.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2004-01-29 05:55:26 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								< / div >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< / body >  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								< / html >