I have designed a matrix class. Now I would like to initialize via list
Matrix3D m2{{1,2,3},{4,5,6},{7,8,9}};
instead of
Matrix3D m1(1,2,3,4,5,6,7,8,9);
I have added a static assert to force the size of the matrix which does not work.
How should I modify the constructor?
#include <iostream>
using namespace std;
class Matrix3D
{
    int a11;
    int a12;
    int a13;
    int a21;
    int a22;
    int a23;
    int a31;
    int a32;
    int a33;
public:
    Matrix3D(
        int a11,
        int a12,
        int a13,
        int a21,
        int a22,
        int a23,
        int a31,
        int a32,
        int a33):
        a11(a11),
        a12(a12),
        a13(a13),
        a21(a21),
        a22(a22),
        a23(a23),
        a31(a31),
        a32(a32),
        a33(a33)        
    {
    }
    Matrix3D(std::initializer_list<std::initializer_list<double>> listlist);
};
Matrix3D::Matrix3D(std::initializer_list<std::initializer_list<double>> listlist)
{
    constexpr int rows = (int)(listlist.begin()).size();
    constexpr int cols = (int)listlist.size();
    static_assert(rows == 3, "");
    static_assert(cols == 3, "");
    a11=(listlist.begin()+0)[0];
    a12=(listlist.begin()+0)[1];
    a13=(listlist.begin()+0)[2];
    a21=(listlist.begin()+1)[0];
    a22=(listlist.begin()+1)[1];
    a23=(listlist.begin()+1)[2];
    a31=(listlist.begin()+2)[0];
    a32=(listlist.begin()+2)[1];
    a33=(listlist.begin()+2)[2];
}
int main() {
    Matrix3D m1(1,2,3,4,5,6,7,8,9);
    Matrix3D m2{{1,2,3},{4,5,6},{7,8,9}};
    return 0;
}
 
    