43 lines
		
	
	
		
			871 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			871 B
		
	
	
	
		
			C++
		
	
	
	
	
	
| 
 | |
| #pragma once
 | |
| 
 | |
| #if !defined(MIJIN_UTIL_MISC_HPP_INCLUDED)
 | |
| #define MIJIN_UTIL_MISC_HPP_INCLUDED 1
 | |
| 
 | |
| #include <array>
 | |
| #include <utility>
 | |
| 
 | |
| namespace mijin
 | |
| {
 | |
| 
 | |
| //
 | |
| // public functions
 | |
| //
 | |
| 
 | |
| template<auto V, typename T>
 | |
| constexpr decltype(auto) idValue(T&& value)
 | |
| {
 | |
|     return std::forward<T>(value);
 | |
| }
 | |
| 
 | |
| namespace impl
 | |
| {
 | |
| template<typename T, typename... TArgs>
 | |
| struct ConstructArrayHelper
 | |
| {
 | |
|     template<std::size_t... I>
 | |
|     static constexpr std::array<T, sizeof...(I)> construct(const TArgs&... args, std::index_sequence<I...>)
 | |
|     {
 | |
|         return {idValue<I>(T(args...))...};
 | |
|     }
 | |
| };
 | |
| }
 | |
| 
 | |
| template<typename T, std::size_t count, typename... TArgs>
 | |
| constexpr std::array<T, count> constructArray(const TArgs&... args)
 | |
| {
 | |
|     return impl::ConstructArrayHelper<T, TArgs...>::construct(args..., std::make_index_sequence<count>());
 | |
| }
 | |
| }
 | |
| #endif // !defined(MIJIN_UTIL_MISC_HPP_INCLUDED)
 |