#include <array>
#include <functional>
/// vector.h
template < typename NumType, unsigned char Size>
class Vector
{
public :
using CoordType = NumType;
//Vector(const Vector& v) : values(v.values) {}
//Vector(Vector&& v) : values(std::move(v.values)) {}
template < typename ... NumTypes >
constexpr Vector( NumTypes&& ... vals ) : values{ std:: forward < NumTypes> ( vals) ... }
{
static_assert( sizeof ...( NumTypes) == Size, "You must provide N arguments." ) ;
}
Vector( const std:: array < NumType, Size> & values) : values( values) { }
Vector( std:: array < NumType, Size> && values) : values( std:: move ( values) ) { }
const NumType& operator[ ] ( size_t offset) const { return values[ offset] ; }
NumType& operator[ ] ( size_t offset) { return values[ offset] ; }
//Vector& operator=(const Vector& other) { values = other.values; }
//Vector& operator=(Vector&& other) { values = std::move(other.values); }
std:: array < NumType, Size> values;
} ;
/// END vector.h
using Vector3Int = Vector< int , 3 > ;
int main( ) {
Vector3Int test { 1 ,2 ,3 } ;
Vector3Int test2 = test;
return 0 ;
}
CiNpbmNsdWRlIDxhcnJheT4KI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CgoKLy8vIHZlY3Rvci5oCnRlbXBsYXRlIDx0eXBlbmFtZSBOdW1UeXBlLCB1bnNpZ25lZCBjaGFyIFNpemU+CmNsYXNzIFZlY3Rvcgp7CnB1YmxpYzoKICB1c2luZyBDb29yZFR5cGUgPSBOdW1UeXBlOwoKICAvL1ZlY3Rvcihjb25zdCBWZWN0b3ImIHYpIDogdmFsdWVzKHYudmFsdWVzKSB7fQogIC8vVmVjdG9yKFZlY3RvciYmIHYpIDogdmFsdWVzKHN0ZDo6bW92ZSh2LnZhbHVlcykpIHt9CgogIHRlbXBsYXRlPHR5cGVuYW1lLi4uIE51bVR5cGVzPgogIGNvbnN0ZXhwciBWZWN0b3IoTnVtVHlwZXMmJi4uLiB2YWxzKSA6IHZhbHVlc3sgc3RkOjpmb3J3YXJkPE51bVR5cGVzPih2YWxzKS4uLiB9CiAgewogICAgc3RhdGljX2Fzc2VydChzaXplb2YuLi4oTnVtVHlwZXMpID09IFNpemUsICJZb3UgbXVzdCBwcm92aWRlIE4gYXJndW1lbnRzLiIpOwogIH0KCiAgVmVjdG9yKGNvbnN0IHN0ZDo6YXJyYXk8TnVtVHlwZSwgU2l6ZT4mIHZhbHVlcykgOiB2YWx1ZXModmFsdWVzKSB7fQogIFZlY3RvcihzdGQ6OmFycmF5PE51bVR5cGUsIFNpemU+JiYgdmFsdWVzKSA6IHZhbHVlcyhzdGQ6Om1vdmUodmFsdWVzKSkge30KCiAgY29uc3QgTnVtVHlwZSYgb3BlcmF0b3JbXShzaXplX3Qgb2Zmc2V0KSBjb25zdCB7IHJldHVybiB2YWx1ZXNbb2Zmc2V0XTsgfQogIE51bVR5cGUmIG9wZXJhdG9yW10oc2l6ZV90IG9mZnNldCkgeyByZXR1cm4gdmFsdWVzW29mZnNldF07IH0KICAvL1ZlY3RvciYgb3BlcmF0b3I9KGNvbnN0IFZlY3RvciYgb3RoZXIpIHsgdmFsdWVzID0gb3RoZXIudmFsdWVzOyB9CiAgLy9WZWN0b3ImIG9wZXJhdG9yPShWZWN0b3ImJiBvdGhlcikgeyB2YWx1ZXMgPSBzdGQ6Om1vdmUob3RoZXIudmFsdWVzKTsgfQoKICBzdGQ6OmFycmF5PE51bVR5cGUsIFNpemU+IHZhbHVlczsKCn07Ci8vLyBFTkQgdmVjdG9yLmgKCnVzaW5nIFZlY3RvcjNJbnQgPSBWZWN0b3I8aW50LCAzPjsKaW50IG1haW4oKSB7CglWZWN0b3IzSW50IHRlc3QgezEsMiwzfTsKCVZlY3RvcjNJbnQgdGVzdDIgPSB0ZXN0OwoJCglyZXR1cm4gMDsKfQ==
compilation info
prog.cpp: In instantiation of ‘constexpr Vector<NumType, Size>::Vector(NumTypes&& ...) [with NumTypes = {Vector<int, 3>&}; NumType = int; unsigned char Size = 3]’:
prog.cpp:38:21: required from here
prog.cpp:17:82: error: cannot convert ‘Vector<int, 3>’ to ‘int’ in initialization
constexpr Vector(NumTypes&&... vals) : values{ std::forward<NumTypes>(vals)... }
^
prog.cpp:19:39: error: static assertion failed: You must provide N arguments.
static_assert(sizeof...(NumTypes) == Size, "You must provide N arguments.");
~~~~~~~~~~~~~~~~~~~~^~~~~~~
stdout