#include <iostream>
template<typename T, std::size_t N>
constexpr std::size_t GetArrySize(T (&)[N]) noexcept {
return N;
}
template<typename T>
constexpr auto Add(T&& arr) noexcept {
std::size_t sz = GetArrySize(arr);
decltype(arr[0]) val = arr[0] ;
for (size_t i = 1; i < sz; ++i) {
val += arr[i];
}
return val;
}
int main()
{
int Arr[] = { 1, 2, 3, 4, 5 };
//std::cout << GetArrySize(Arr) << std::endl;
std::cout << Add(Arr) << std::endl;
float Arr1[] = { 1.1f, 2.2f, 3.3f };
std::cout << Add(Arr1) << std::endl;
double Arr2[] = { 1.1 };
std::cout << Add(Arr2) << std::endl;
}