実況
- IsIteratorCategory
::value が falseになるってなんで? - IteratorCategoryWithTraversal クラステンプレートの第1引数か。
- FacadeIteratorCategoryImpl クラステンプレートの引数から導出した IteratorFacadeDefaultCategory
::Type が Category になってる。 - マテ、TypeSelect してた。ユーザー指定の T と IteratorCategoryToTraversal
::Type が同型なら Category、そうでなければ IteratorCategoryWithTraversal か。 - じゃぁ T と IteratorCategoryToTraversal
::Type は異なってるのか。
あ"ーこんがらがってきた!
最初から順に行こう。
IteratorAdaptor<PtrIterator<dummyT>, dummyT*, dummyT, Ash::RandomAccessTraversalTag>
Detail::IteratorAdaptorBase<PtrIterator<dummyT>, dummyT*, dummyT, Ash::RandomAccessTraversalTag, UseDefault, UseDefault>::Type
Detail::IteratorFacade<PtrIterator<dummyT>, dummyT, Ash::RandomAccessTraversalTag, dummyT&, std::iterator_traits<dummyT*>::difference_type>
この IteratorFacade の iterator_category 型が引き金。
IteratorFacadeTypes<PtrIterator<dummyT>, dummyT, Ash::RandomAccessTraversalTag, dummyT&, std::iterator_traits<dummyT*>::difference_type> AssociatedTypes;
Detail::IteratorFacadeTypes<dummyT, Ash::RandomAccessTraversalTag, dummyT&, std::iterator_traits<dummyT*>::difference_type>;
この IteratorFacadeTypes に iterator_category 型がある。
FacadeIteratorCategory<Ash::RandomAccessTraversalTag, dummyT, dummyT&>::Type
TypeSelect<
IsIteratorCategory<CategoryOrTraversal>::value
, CategoryOrTraversal
, typename FacadeIteratorCategoryImpl<CategoryOrTraversal, ValueParam, Reference>::Type
>
わかった。 CategoryOrTraversal を Type2Type しないとだめだ。
しかし、わけわからん…