#include <vector>
#include <array>
#include <type_traits>
#include <iostream>
using int_ = int;
static class size_2d_
{
};
template<int X_, int Y_>
class size_2d : public size_2d_
{
public:
static constexpr int X = X_;
static constexpr int Y = Y_;
};
template<typename T, typename vT>
requires std::is_base_of_v<size_2d_, T>
using matrix = std::array<std::array<vT, T::X>, T::Y>;
int main()
{
matrix<size_2d<3, 4>, int> mat =
{{ //여기서 두 겹을 써야한다.
{1,2,3},
{4,5,6},
{7,8,9},
{1,2,3}
}};
for (int y = 0; y < 5; y++)
{
for (int x = 0; x < 5; x++)
{
std::cout << mat[y][x];
}
std::cout << std::endl;
}
}
//왜냐하면 {{1,2,3},4,5,6}을 {1,2,3,4,5,6}이랑 같게 취급하는 문법이 있기 때문ㅇ다