Boost C++ Libraries: Ticket #11847: reference typedef no longer available in parent class of iterator_facade https://svn.boost.org/trac10/ticket/11847 <p> The iterator_facade defines the reference type. In Boost version 1.56 the parent class to the facade could make use of this type, from version 1.57 this is no longer possible. </p> <p> This is not difficult to work around, but does cause existing code to fail. </p> <p> I am using Visual Studio 2013 (12.0) </p> <p> See code below: </p> <p> #include &lt;boost/iterator/iterator_facade.hpp&gt; </p> <p> #include &lt;vector&gt; </p> <p> template&lt;class T&gt; </p> <p> class simple_iterator : public </p> <blockquote> <p> boost::iterator_facade&lt;simple_iterator&lt;T&gt;, T, boost::forward_traversal_tag&gt; </p> </blockquote> <p> { </p> <p> public: </p> <blockquote> <p> simple_iterator(const typename std::vector&lt;T&gt;::iterator&amp; i) : m_iter(i) {} </p> </blockquote> <p> private: </p> <blockquote> <p> friend boost::iterator_core_access; </p> </blockquote> <p> </p> <blockquote> <p> /* The commented line compiled in 1.56 but no longer so in 1.57 */ </p> </blockquote> <blockquote> <p> /* reference dereference() const { return *m_iter; } */ </p> </blockquote> <blockquote> <p> T&amp; dereference() const { return *m_iter; } </p> </blockquote> <blockquote> <p> bool equal(const simple_iterator&amp; that) { return m_iter == that.m_iter; } </p> </blockquote> <blockquote> <p> void increment() { ++m_iter; } </p> </blockquote> <blockquote> <p> typename std::vector&lt;T&gt;::iterator m_iter; </p> </blockquote> <p> }; </p> <p> int main() { </p> <blockquote> <p> std::vector&lt;int&gt; v = { 1, 2, 3 } ; </p> </blockquote> <blockquote> <p> simple_iterator&lt;int&gt; i(v.begin()); </p> </blockquote> <blockquote> <p> simple_iterator&lt;int&gt;::reference vi = *i; </p> </blockquote> <blockquote> <p> return 0; </p> </blockquote> <p> } </p> en-us Boost C++ Libraries /htdocs/site/boost.png https://svn.boost.org/trac10/ticket/11847 Trac 1.4.3