// Copyright 2019 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef LIBBRILLO_BRILLO_ARRAY_UTILS_H_
#define LIBBRILLO_BRILLO_ARRAY_UTILS_H_

#include <array>
#include <utility>

namespace brillo {

// Create a std::array from a set of values without manually specifying the
// size of the array. Note that unlike the make_array likely to make its way
// into C++20, this function always requires the user to specify ElementType.
// This is done so that users are not surprised by the element type of resulting
// arrays when std::common_type is used.
template <typename ElementType, typename... T>
constexpr auto make_array(T&&... values) {
  return std::array<ElementType, sizeof...(T)>{
      static_cast<ElementType>(std::forward<T>(values))...};
}

}  // namespace brillo

#endif  // LIBBRILLO_BRILLO_ARRAY_UTILS_H_
