Boost logo

Boost Users :

Subject: [Boost-users] [Boost.Iterator] Problem compiling zip_iterator with clang and C++11
From: Jonathan Jones (Jonathan.Jones_at_[hidden])
Date: 2013-11-13 15:00:16


Hi folks,

The following code fails to compile on OSX 10.8.5 with Xcode 5.0.1 and Boost 1.49.0. This is not real world code, but it demonstrates the problem I'm facing.

  #include <boost/iterator/zip_iterator.hpp>

  template<typename T>
  void foo()
  {
      boost::zip_iterator<boost::tuple<T*, T*> > iter;
      std::fill(iter, iter, std::make_pair(T(),T()));
  }

  void bar()
  {
      foo<int>();
  }

Here are the commands I used to compile (if I drop "-stdlib=libc++" from the compile line, the code compiles just fine):

  setenv DEVELOPER_DIR /Applications/Xcode5.0.1.app/Contents/Developer
  xcrun -sdk macosx10.8 clang++ -c zip_iterator.cpp -I<boost-path>/include -std=c++11 -stdlib=libc++

and here is a heavily formatted snippet of the key error:

/Applications/Xcode5.0.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/c++/v1/algorithm:1824:1:
  note: candidate function
    [with _RandomAccessIterator = boost::zip_iterator<boost::tuples::tuple<int*, int*>>, _Tp = std::__1::pair<int, int>]
  not viable: no known conversion from
    typename iterator_traits<zip_iterator<tuple<int*, int*>>>::iterator_category
    (aka 'boost::detail::iterator_category_with_traversal<std::__1::input_iterator_tag, boost::random_access_traversal_tag>')
  to
    'std::__1::random_access_iterator_tag'
  for 4th argument
    __fill(_RandomAccessIterator __first, _RandomAccessIterator __last, const _Tp& __value_, random_access_iterator_tag)

Any help is appreciated.

Thanks,
Jon


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net