| template <class I>
 concept bool Readable() {}return ranges::Movable<I>()
 && ranges::DefaultConstructible<I>()
 && requires(const I& i) {
 typename ranges::value_type_t<I>;
 typename ranges::reference_t<I>;
 typename ranges::rvalue_reference_t<I>;
 { *i } -> ranges::Same<ranges::reference_t<I>>;
 { ranges::iter_move(i) } -> ranges::Same<ranges::rvalue_reference_t<I>>;
 }
 && ranges::CommonReference<ranges::reference_t<I>, ranges::value_type_t<I>&>()
 && ranges::CommonReference<ranges::reference_t<I>,
 ranges::rvalue_reference_t<I>>()
 && ranges::CommonReference<ranges::rvalue_reference_t<I>,
 const ranges::value_type_t<I>&>()
 && ranges::Same<std::common_reference_t<ranges::reference_t<I>,
 ranges::value_type_t<I>>,
 ranges::value_type_t<I>>()
 && ranges::Same<std::common_reference_t<ranges::rvalue_reference_t<I>,
 ranges::value_type_t<I>>,
 ranges::value_type_t<I>>();
 
 |  | (ranges TS) |