#include <iostream>
#include <array>
#include <type_traits>
template<typename Type = float, size_t SIZE = 3>
class Vector {
std::array<Type, SIZE> e = {};
public:
template<typename Dummy = void, std::enable_if_t<SIZE >= 3, Dummy>* = nullptr>
Type x() const { return e[0]; };
template<typename Dummy = void, std::enable_if_t<SIZE >= 3, Dummy>* = nullptr>
Type y() const { return e[1]; };
template<typename Dummy = void, std::enable_if_t<SIZE >= 3, Dummy>* = nullptr>
Type z() const { return e[2]; };
template<typename Dummy = void, std::enable_if_t<SIZE >= 4, Dummy>* = nullptr>
Type w() const { return e[3]; };
};
int main()
{
Vector v1;
Vector<int, 4> v2;
v1.x();
v1.y();
v1.z();
//v1.w();
v2.x();
v2.y();
v2.z();
v2.w();
return 0;
}