Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::indirectly_readable_traits

      From cppreference.com
      <cpp‎ |iterator
       
       
      Iterator library
      Iterator concepts
      Iterator primitives
      (deprecated in C++17)
      indirectly_readable_traits
      (C++20)


      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<class I>
      struct indirectly_readable_traits{};
      (1)(since C++20)
      template<class T>

      struct indirectly_readable_traits<T*>:

         /* cond-value-type */<T>{};
      (2)(since C++20)
      template<class I>

          requiresstd::is_array_v<I>
      struct indirectly_readable_traits<I>;

      {using value_type=std::remove_cv_t<std::remove_extent_t<I>>;}
      (3)(since C++20)
      template<class T>

      struct indirectly_readable_traits<const T>:

          indirectly_readable_traits<T>{};
      (4)(since C++20)
      template</* has-member-value-type */ T>

      struct indirectly_readable_traits<T>:

         /* cond-value-type */<typename T::value_type>{};
      (5)(since C++20)
      template</* has-member-element-type */ T>

      struct indirectly_readable_traits<T>:

         /* cond-value-type */<typename T::element_type>{};
      (6)(since C++20)
      template</* has-member-value-type */ T>

          requires/* has-member-element-type */<T>

      struct indirectly_readable_traits<T>{};
      (7)(since C++20)
      template</* has-member-value-type */ T>

          requires/* has-member-element-type */<T>&&
                   std::same_as<std::remove_cv_t<typename T::element_type>,
                               std::remove_cv_t<typename T::value_type>>
      struct indirectly_readable_traits<T>:

         /* cond-value-type */<typename T::value_type>{};
      (8)(since C++20)
      Helper classes and concepts
      template<class>
      struct/* cond-value-type */{};
      (1)(exposition only*)
      template<class T>

          requiresstd::is_object_v<T>
      struct/* cond-value-type */<T>

      {using value_type=std::remove_cv_t<T>;};
      (2)(exposition only*)
      template<class T>

      concept/* has-member-value-type */=

          requires{typename T::value_type;};
      (3)(exposition only*)
      template<class T>

      concept/* has-member-element-type */=

          requires{typename T::element_type;};
      (4)(exposition only*)

      Computes the associated value type of the template argument. If the associated value type exists, it is represented by the nested typevalue_type, otherwisevalue_type is not defined. A program may specializeindirectly_readable_traits for aprogram-defined type.

      Contents

      [edit]Explanation

      The specializations above can be informally described as below.

      Given a typeT, its associated value typeV is determined as follows:

      • IfT is const-qualified,V is the associated value type of const-unqualifiedT.
      • Otherwise, ifT is an array type,V is the cv-unqualified array element type.
      • Otherwise, a conditional value typeC is determined first:
      • IfT is a pointer type,C is the pointed-to type.
      • Otherwise, ifT has nested typesvalue_type andelement_type:
      • If these types are the same (not considering cv-qualification),C istypename T::value_type.
      • Otherwise,C is undefined.
      • Otherwise, ifT has the nested typevalue_type but notelement_type,C istypename T::value_type.
      • Otherwise, ifT has the nested typeelement_type but notvalue_type,C istypename T::element_type.
      • Otherwise,C is undefined.
      ThenV is determined fromC as follows:
      • IfC is undefined, orC is not anobject type,V is undefined.
      • Otherwise,V is cv-unqualifiedC.

      [edit]Notes

      value_type is intended for use withindirectly_readable types such as iterators. It is not intended for use with ranges.

      [edit]Example

      This section is incomplete
      Reason: no example

      [edit]Defect reports

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

      DRApplied toBehavior as publishedCorrect behavior
      LWG 3446C++20specializations(5,6) were ambiguous for types having
      bothvalue_type andelement_type nested types
      added specialization(8)
      LWG 3541C++20LWG 3446 introduced hard error for ambiguous cases
      thatvalue_type andelement_type are different
      added specialization(7)

      [edit]See also

      specifies that a type is indirectly readable by applying operator*
      (concept)[edit]
      computes the associated types of an iterator
      (alias template)[edit]
      provides uniform interface to the properties of an iterator
      (class template)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/iterator/indirectly_readable_traits&oldid=170152"

      [8]ページ先頭

      ©2009-2025 Movatter.jp