Конструктор для вложенных списков инициализаторов

Возможно ли иметь универсальный конструктор, который принимает любой тип списка инициализатора, даже если в нем есть вложенные списки?

Скажем, у вас есть следующая частичная специализация шаблона для класса, который принимает в своем конструкторе вложенные списки инициализаторов:

шаблон класса ClassA;

template 
class ClassA {

  typedef std::initializer_list list_type;
  typedef std::initializer_list llist_type;
  typedef std::initializer_list lllist_type;
  typedef std::initializer_list initializer_type;

  size_t n_[4] = {0};
  double* data_;

public:

  ClassA(initializer_type l) {

    assert(l.size() > 0);
    assert(l.begin()->size() > 0);
    assert(l.begin()->begin()->size() > 0);
    assert(l.begin()->begin()->begin()->size() > 0);

    size_t m = n_[0] = l.size();
    size_t n = n_[1] = l.begin()->size();
    size_t o = n_[2] = l.begin()->begin()->size();
    n_[3] = l.begin()->begin()->begin()->size();

    data_ = new double[m*n*o*n_[3]];

    int i=0, j=0, k=0, p=0;
    for (const auto& u : l) {
      assert(u.size() == n_[1]);
      for (const auto& v : u) {
        assert(v.size() == n_[2]);
        for (const auto& x : v) {
          assert(x.size() == n_[3]);
          for (const auto& y : x) {
            data_[i + m*j + m*n*k + m*n*o*p] = y;
            ++p;
          }
          p = 0;
          ++k;
        }
        k = 0;
        ++j;
      }
      j = 0;
      ++i;
    }
  }

  size_t size() const {
    size_t n = 1;
    for (size_t i=0; i

Ответы на вопрос(2)

Ваш ответ на вопрос