I do not know this in the standard, but it is not difficult to implement it:
template <class C>
struct value_type
{
typedef typename C::value_type type;
};
template <class T, int N>
struct value_type<T[N]>
{
typedef T type;
};
template <class T>
struct value_type<T*>
{
typedef T type;
};
typename value_type<C>::type , . , , value_type typedef ( - ), .
typename ...::type, :
template <class C>
using Value_Type = typedef value_type<C>::type;
Value_Type<C> .
stefan, std::begin, , , /, std::begin std::end :
template <class C>
using Value_Type = typename std::remove_reference<
decltype(*std::begin(std::declval<
typename std::add_lvalue_reference<C>::type>()))>::type;
, . - , , .