|
832 | 832 |
|
833 | 833 | \indexlibraryglobal{indirectly_readable_traits}% |
834 | 834 | \begin{codeblock} |
835 | | -template<class> struct @\placeholder{cond-value-type}@ { }; // \expos |
| 835 | +template<class> struct @\exposid{cond-value-type}@ { }; // \expos |
836 | 836 | template<class T> |
837 | 837 | requires is_object_v<T> |
838 | | -struct @\placeholder{cond-value-type}@<T> { |
| 838 | +struct @\exposid{cond-value-type}@<T> { |
839 | 839 | using value_type = remove_cv_t<T>; |
840 | 840 | }; |
841 | 841 |
|
|
849 | 849 |
|
850 | 850 | template<class T> |
851 | 851 | struct indirectly_readable_traits<T*> |
852 | | - : @\placeholder{cond-value-type}@<T> { }; |
| 852 | + : @\exposid{cond-value-type}@<T> { }; |
853 | 853 |
|
854 | 854 | template<class I> |
855 | 855 | requires is_array_v<I> |
|
863 | 863 |
|
864 | 864 | template<@\exposconcept{has-member-value-type}@ T> |
865 | 865 | struct indirectly_readable_traits<T> |
866 | | - : @\placeholder{cond-value-type}@<typename T::value_type> { }; |
| 866 | + : @\exposid{cond-value-type}@<typename T::value_type> { }; |
867 | 867 |
|
868 | 868 | template<@\exposconcept{has-member-element-type}@ T> |
869 | 869 | struct indirectly_readable_traits<T> |
870 | | - : @\placeholder{cond-value-type}@<typename T::element_type> { }; |
| 870 | + : @\exposid{cond-value-type}@<typename T::element_type> { }; |
871 | 871 |
|
872 | 872 | template<@\exposconcept{has-member-value-type}@ T> |
873 | 873 | requires @\exposconcept{has-member-element-type}@<T> |
|
877 | 877 | requires @\exposconcept{has-member-element-type}@<T> && |
878 | 878 | @\libconcept{same_as}@<remove_cv_t<typename T::element_type>, remove_cv_t<typename T::value_type>> |
879 | 879 | struct indirectly_readable_traits<T> |
880 | | - : @\placeholder{cond-value-type}@<typename T::value_type> { }; |
| 880 | + : @\exposid{cond-value-type}@<typename T::value_type> { }; |
881 | 881 |
|
882 | 882 | template<class T> using iter_value_t = @\seebelow@; |
883 | 883 | \end{codeblock} |
|
0 commit comments