//#define USE_STD_ARRAY //#define WITH_VWR #if defined(WITH_VWR) # include #endif #if defined(USE_STD_ARRAY) # include #endif #include #include namespace { #if !defined(USE_STD_ARRAY) struct MyVecStruct { float x, y, z; }; #endif } //unnamed namespace #if defined(WITH_VWR) namespace vwr { #if defined(USE_STD_ARRAY) template <> struct VectorWrapperInfo> { enum { dimensions = 3 }; typedef float scalar_type; typedef std::array vector_type; static scalar_type& get_at (std::size_t idx, vector_type& v) { return v[idx]; } }; #else template <> struct VectorWrapperInfo { enum { dimensions = 3 }; typedef float scalar_type; typedef MyVecStruct vector_type; enum { offset_x = offsetof(MyVecStruct, x), offset_y = offsetof(MyVecStruct, y), offset_z = offsetof(MyVecStruct, z) }; }; #endif } //namespace vwr namespace { #if defined(USE_STD_ARRAY) typedef vwr::Vec, 3> vec3; #else typedef vwr::Vec vec3; #endif } //unnamed namespace #endif int main() { #if defined(WITH_VWR) vec3 v; std::cin >> v.x() >> v.y() >> v.z(); const float sum = v.x() + v.y() + v.z(); #elif defined(USE_STD_ARRAY) std::array arr; std::cin >> arr[0] >> arr[1] >> arr[2]; const float sum = arr[0] + arr[1] + arr[2]; #else MyVecStruct v; std::cin >> v.x >> v.y >> v.z; const float sum = v.x + v.y + v.z; #endif return static_cast(sum); }