
Seems like in MSVC++ 8.0 boost::iterator_adaptor doesn't work when the associated Value type is incomplete. For instance, the following program: #include <boost/iterator/iterator_adaptor.hpp> template<typename T> struct my_iterator: boost::iterator_adaptor<my_iterator<T>,T*> { }; struct foo { my_iterator<foo> it; }; int main(){} results in: ...\boost\type_traits\is_pod.hpp(34) : error C2139: 'foo' : an undefined class is not allowed as an argument to compiler intrinsic type trait '__is_pod' ...\sandbox.cpp(10) : see declaration of 'foo' ...\type_traits\is_pod.hpp(128) : see reference to class template instantiation 'boost::detail::is_pod_impl<T>' being compiled [...] ...\boost\iterator\iterator_facade.hpp(652) : see reference to class templateinstantiation 'boost::detail::operator_brackets_result<Iterator,Value,Reference
' being compiled with [ Iterator=my_iterator<foo>, Value=foo, Reference=foo & ] [...]
while the following variation using a custom "adaptor" works just fine: template<typename Derived,typename Base> struct my_iterator_adaptor { Base b; }; template<typename T> struct my_iterator: my_iterator_adaptor<my_iterator<T>,T*> { }; struct foo { my_iterator<foo> it; }; int main(){} IMHO, boost::iterator_adaptor should be compilable with incomplete Value just as the canonical Value* does. Any possibility that this can be addressed in MSVC++ 8.0? Thank you, Joaquín M López Muñoz Telefónica, Investigación y Desarrollo