Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::iterator_traits<std::counted_iterator>

      From cppreference.com
      <cpp‎ |iterator‎ |counted iterator
       
       
      Iterator library
      Iterator concepts
      Iterator primitives
      Algorithm concepts and utilities
      Indirect callable concepts
      Common algorithm requirements
      (C++20)
      (C++20)
      (C++20)
      Utilities
      (C++20)
      Iterator adaptors
      Range access
      (C++11)(C++14)
      (C++14)(C++14)  
      (C++11)(C++14)
      (C++14)(C++14)  
      (C++17)(C++20)
      (C++17)
      (C++17)
       
       
      Defined in header<iterator>
      template<std::input_iterator I>

          requires/* see below */
      struct iterator_traits<std::counted_iterator<I>>:std::iterator_traits<I>{
         using pointer=std::conditional_t<std::contiguous_iterator<I>,
                                             std::add_pointer_t<std::iter_reference_t<I>>,
                                             void>;

      };
      (since C++20)

      Inherits the properties from customized (generated from either a standard partial specialization or a program-defined specialization)std::iterator_traits<I>, with the member typepointer adjusted, whereI modelsinput_iterator.

      Notably, theiterator_concept (if present) anditerator_category are inherited fromstd::iterator_traits<I>.

      The condition in the requires-clause istrue if and only ifstd::iterator_traits<I> is not generated from the primary template.

      Contents

      [edit]Note

      BeforeP2259R1, this specialization is used even ifstd::iterator_traits<I> is generated from the primary template. As a result, when testingstd::counted_iterator<I> against an iterator concept (e.g.forward_iterator), the determination of/*ITER_CONCEPT*/ does not takeI::iterator_concept into account, and thusstd::counted_iterator<I> sometimes erroneously behaves as if it cannot model that concept. This incorrect behavior is implemented in libstdc++ prior to 10.4, and in MSVC STL prior to VS 2022 17.0 Preview 3.

      The standard library provides partial specializations ofstd::iterator_traits for pointer types,std::counted_iterator, andstd::common_iterator.

      [edit]Example

      Run this code
      #include <iterator>#include <list>#include <type_traits>#include <vector> int main(){std::vector v{1,2,3,4};std::list l{1,2,3,4};std::counted_iterator iv{v.begin(),3};std::counted_iterator il{l.begin(),3};    static_assert(std::is_same<int*,std::iterator_traits<decltype(iv)>::pointer>());    static_assert(std::is_same<void,std::iterator_traits<decltype(il)>::pointer>());}

      [edit]Defect reports

      The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

      DRApplied toBehavior as publishedCorrect behavior
      P2259R1C++20there's no requires-clause
      pointer is unconditionally defined asvoid
      constraint added

      [edit]See also

      provides uniform interface to the properties of an iterator
      (class template)
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/iterator/counted_iterator/iterator_traits&oldid=159834"

      [8]ページ先頭

      ©2009-2026 Movatter.jp