Если у вас есть компилятор C ++ 0x / C ++ 1x, это будет разрешено с немного другим синтаксисом (кажется, что компиляторы все еще не поддерживают эту функцию):
template <typename B, typename C>
using Y = X< std::vector<B>, B, C >;
Вы можете использовать другие методы, такие как определение закрытого типа в шаблонной структуре (как предлагает Питер) или злоупотребление наследованием (по возможности избегайте):
template <typename B, typename C>
class Y : public X< std::vector<B>, B, C > {};