As for the template parameter n, you can avoid it by using it autoas the return type in C ++ 14. Here's a simpler example of the principle:
template<int N>
auto f()
{
constexpr int bar = N * 3;
std::array<int, bar> foo;
return foo;
}
, .
( ++ 11) trailing-return-type:
template<int N>
auto f() -> std::array<int, N * 3>
{
, ++ 14, return.
: ~0 , 0 int, ~(InType)0. (1 << bits) - 1 .