:ブースト1.45でVS2008でboost :: iterator_facadeのboost :: range_detail :: demote_iterator_traversal_tagのバグですか?次のコード
error C2039: 'type' : is not a member of 'boost::range_detail::demote_iterator_traversal_tag<IteratorTraversalTag1,IteratorTraversalTag2>'
1> with
1> [
1> IteratorTraversalTag1=boost::detail::iterator_category_with_traversal<std::input_iterator_tag,boost::random_access_traversal_tag>,
1> IteratorTraversalTag2=boost::detail::iterator_category_with_traversal<std::input_iterator_tag,boost::random_access_traversal_tag>
1> ]
...
:
#include <boost/range/adaptor/transformed.hpp>
#include <boost/range/join.hpp>
struct foo {
typedef int result_type;
result_type operator()(int x) { return x; }
};
int main() {
using boost::adaptors::transformed;
int a[] = {1, 2, 3};
boost::join(a | transformed(foo()), a | transformed(foo()));
return 0;
}
は、コンパイルエラーになります。
Iはboost::range_detail::demote_iterator_traversal_tag
のソースコードに潜っ、それは約boost::detail::iterator_category_with_traversal
適切な反復子カテゴリを推定するiterator_facade
によって使用boost::detail::facade_iterator_category
によって生成された対価を与えるものではありませんが見つかりました。
transform_iterator
はiterator_facade
に基づいているので、a | transformed(foo())
の反復子カテゴリがiterator_category_with_traversal<std::input_iterator_tag,boost::random_access_traversal_tag>
なると推定されていますが、demote_iterator_traversal_tag
はそれを認識しません。
理由はわかりませんdemote_iterator_traversal_tag
はこのように設計されています。それとも単なるバグでしょうか?
ありがとうございました。
同様の投稿をメーリングリストに掲載することも考えられます。 – GManNickG