// https://godbolt.org/z/9qsGW6M8Y
template<std::ranges::range T> // eine Range über Typ T
using ValueTypeOfRange = std::ranges::range_value_t<T>;
// oder
template<typename T>
requires std::ranges::range<T> // eine Range über Typ T
using ValueTypeOfRange = std::ranges::range_value_t<T>;
// ergibt:
ValueTypeOfRange<std::vector<int>> x; // x ist int
ValueTypeOfRange<std::string> y; // y ist char
ValueTypeOfRange<std::list<double>> z; // z ist double
ValueTypeOfRange<int> w; // (ERR) int ist keine Range