// Variadic template
template < int n >
class Vec
{
private:
float e[n];
public:
template <typename... Arguments>
Vec(Arguments... params);
constexpr int GetSize( void ) const { return n; }
};
template < int n >
template <typename... Arguments>
Vec<n>::Vec<n>(Arguments... params)
{
static_assert(sizeof...(Arguments) == n, “size mismatch”);
float v[] = { params... };
for (int i = 0; i < n; ++i) {
e[i] = v[i];
}
}