Using std::array to implement variadic construction of class with list-of-self as subclass
I have a few things to say about your code:


Do you intend to actually do things in the constructors instead of just displaying strings? Knowing this would help the review process. Currently, you do not store anything passed to Item, but if you intend to store things at some point, it may change things.
Instead of using &amp;a[0] which is kind of obscure and not easy to find with a simple search query, you shoud use a.data() which clearly shows the intent.
It would probably be a good idea to pass the std::array by const reference in the constructor instead of passing it by copy. That will avoid useless copies:

template&lt;size_t N&gt; 
Block (std::array&lt;Listable, N&gt; const&amp; a) : Block (&amp;a[0], N) { cout &lt;&lt; "Barray\n"; }


Of course, that implies that you take const Listable* instead of Listable* at some point (but we come back to my first point: we lack information about what your code is supposed to do). I don't know what you intend to do with this, but passing a pointer to the underlying memory of a temporary doesn't feel right. This may create dangling pointers.

EDIT: since your code isn't supposed to store the pointer, then taking the std::array by copy shoud be safe. But as you noted in the comments, using an rvalue-reference parameters should be even better: it binds to the temporary, you can modify it and no copy is performed. Seems like the best solution.