프로그램/새롭게 발견한 c++ 패턴

중첩 aggregate 시 버그

일기를 쓰는 사람 2025. 7. 30. 15:58
#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}이랑 같게 취급하는 문법이 있기 때문ㅇ다