#include #include #include #include template T larger(T a, T b) { return a < b ? b : a; } template constexpr std::size_t extent(const T (&)[N]) { return N; } int main() { const int values[] = {2, 4, 6}; static_assert(extent(values) == 3, "array extent survives"); auto result = larger(2, 3.5); static_assert(std::is_same::value, "explicit type"); assert(result == 3.5); assert(larger(2, 4) == 4); std::cout << extent(values) << ' ' << larger(2, 4) << '\n'; }