을 iterator_traits표준은 :: 감안하면 libstdC++ 간의 차이와의 libC++
error: no member named '
iterator_category
' in 'std::__1::iterator_traits<Iter>
'std::is_same<std::iterator_traits<Iter>::iterator_category, Iter::iterator_category>::value, "");
Iter::iterator_category
이 표준 입력 범주 중 하나 인 경우 정적 어설 션이 성공합니다 예를 들어 std::input_iterator_tag
.
가 실패하지해야하기 때문에 [iterator.traits]#2에서 C++ 초안 상태 :
If Iterator has valid ([temp.deduct]) member types
difference_type
,value_type
,pointer
,reference
, anditerator_category
,iterator_traits<Iterator>
shall have the following as publicly accessible members:using difference_type = typename Iterator::difference_type; using value_type = typename Iterator::value_type; using pointer = typename Iterator::pointer; using reference = typename Iterator::reference; using iterator_category = typename Iterator::iterator_category;
Otherwise,
iterator_traits<Iterator>
shall have no members by any of the above names.
아무도이 구현 버그인지, 또는 내 기대가 잘못된 이유를 설명시겠습니까?
표준을 해석 할 때 iterator_cathegory의 유일한 유효한 유형은 input_iterator_tag, output_iterator_tag, forward_iterator_tag, bidirectional_iterator_tag 및 random_access_iterator_tag입니다. iterator_cathegory에 다른 값이있는 경우, iterator에는 유효한 iterator_cathegory 유형이 없으므로이 반복자에 대한 iterator_traits에는 지정된 구성원이 없어야합니다. – Johan