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)
 |