I don't think so. std::vector<> isn't a class (yet), it can only be compiled if it knows its type. But I don't believe you normally ever change a std::vector's size_type, so it'll always be std::size_t (see http://en.cppreference.com/w/cpp/container/vector)
So I'd just use std::size_t if I were you!
The reason why you cannot get type alias from templated class without specifying template parameters, is that it can differ between different types and even not exist/be not a type:
#include <iostream>
#include <typeinfo>
template<typename T>
struct foo
{
using type = std::size_t; //Generic type
};
template<>
struct foo<int>
{
using type = short; //Another type
};
template<>
struct foo<unsigned>
{
int type; //Not a type
};
template<>
struct foo<char>
{
//does not exist
};
int main()
{
foo<double>::type x; //OK
foo< int >::type y; //OK
std::cout << (typeid(x) == typeid(y)); // 0 — false: types of x and y are different
//foo<unsigned>::type z; //Error: ::type is not a type.
//foo<char>::type u; //Error: there is no member ::type
}