- // Something similar exist in C++14:
- template<class T>
- constexpr T max(T a, T b)
- {
- return (a > b) ? a : b;
- }
- template<class T, class... Args>
- constexpr T max(T a, Args... b)
- {
- return max(std::forward<T>(a), max(std::forward<Args>(b)...));
- }
+ // Compute the maximum size taken by any of the given types:
+ template <class... T> struct max_size;
+ template <>
+ struct max_size<> : public std::integral_constant<std::size_t, 0> {};
+ template <class T>
+ struct max_size<T> : public std::integral_constant<std::size_t, sizeof(T)> {};
+ template <class T, class... U>
+ struct max_size<T, U...> : public std::integral_constant<std::size_t,
+ (sizeof(T) > max_size<U...>::value) ? sizeof(T) : max_size<U...>::value
+ > {};