Initializing a std::array from a recursive template computation
I think your code is fine for the most part. I don't like the inheritance from std::array, seeing as you can do the same thing with a static array data member, which would make the code easier to maintain (less coupling).

If you're well-and-truly in C++14 land, I think the code is clearer if you use constexpr functions rather than functions-disguised-as-structs:

#include &lt;iostream&gt;
#include &lt;utility&gt;
#include &lt;array&gt;

constexpr size_t factorial(size_t t) {
    return t == 0 ? 1 : t * factorial(t - 1);
}

template&lt;size_t... i&gt;
constexpr auto factorial_array(std::index_sequence&lt;i...&gt;) {
    return std::array&lt;size_t, sizeof...(i)&gt;{{factorial(i)...}};
}

template&lt;size_t size&gt;
constexpr auto factorial_array() {
    return factorial_array(std::make_index_sequence&lt;size&gt;{});
}

int main() {
  constexpr auto f = factorial_array&lt;15&gt;();
  for (size_t i = 0; i &lt; f.size(); i++) {
    std::cout &lt;&lt; i &lt;&lt; "! = " &lt;&lt; f[i] &lt;&lt; '\n';
  }
  return 0;
}