|
820 | 820 |
|
821 | 821 | \indexlibraryglobal{indirectly_readable_traits}% |
822 | 822 | \begin{codeblock} |
823 | | -template<class> struct @\placeholder{cond-value-type}@ { }; // \expos |
| 823 | +template<class> struct @\exposid{cond-value-type}@ { }; // \expos |
824 | 824 | template<class T> |
825 | 825 | requires is_object_v<T> |
826 | | -struct @\placeholder{cond-value-type}@<T> { |
| 826 | +struct @\exposid{cond-value-type}@<T> { |
827 | 827 | using value_type = remove_cv_t<T>; |
828 | 828 | }; |
829 | 829 |
|
|
837 | 837 |
|
838 | 838 | template<class T> |
839 | 839 | struct indirectly_readable_traits<T*> |
840 | | - : @\placeholder{cond-value-type}@<T> { }; |
| 840 | + : @\exposid{cond-value-type}@<T> { }; |
841 | 841 |
|
842 | 842 | template<class I> |
843 | 843 | requires is_array_v<I> |
|
851 | 851 |
|
852 | 852 | template<@\exposconcept{has-member-value-type}@ T> |
853 | 853 | struct indirectly_readable_traits<T> |
854 | | - : @\placeholder{cond-value-type}@<typename T::value_type> { }; |
| 854 | + : @\exposid{cond-value-type}@<typename T::value_type> { }; |
855 | 855 |
|
856 | 856 | template<@\exposconcept{has-member-element-type}@ T> |
857 | 857 | struct indirectly_readable_traits<T> |
858 | | - : @\placeholder{cond-value-type}@<typename T::element_type> { }; |
| 858 | + : @\exposid{cond-value-type}@<typename T::element_type> { }; |
859 | 859 |
|
860 | 860 | template<@\exposconcept{has-member-value-type}@ T> |
861 | 861 | requires @\exposconcept{has-member-element-type}@<T> |
|
865 | 865 | requires @\exposconcept{has-member-element-type}@<T> && |
866 | 866 | @\libconcept{same_as}@<remove_cv_t<typename T::element_type>, remove_cv_t<typename T::value_type>> |
867 | 867 | struct indirectly_readable_traits<T> |
868 | | - : @\placeholder{cond-value-type}@<typename T::value_type> { }; |
| 868 | + : @\exposid{cond-value-type}@<typename T::value_type> { }; |
869 | 869 |
|
870 | 870 | template<class T> using iter_value_t = @\seebelow@; |
871 | 871 | \end{codeblock} |
|
0 commit comments