-inline Vector<T, N>::Vector(T x_, T y_, T z_, T w_)
-{
- this->VectorComponents<T, 4>::x = x_;
- this->VectorComponents<T, 4>::y = y_;
- this->VectorComponents<T, 4>::z = z_;
- this->VectorComponents<T, 4>::w = w_;
+template<typename... Args>
+inline Vector<T, N>::Vector(T x_, Args... v)
+{
+ static_assert(1+sizeof...(v)==N, "Incorrect number of arguments in Vector constructor");
+ (*this)[0] = x_;
+ unsigned i = 1;
+ for(auto c: std::initializer_list<T> { static_cast<T>(v)... })
+ (*this)[i++] = c;