Задача: получить вычисляемые при компиляции массивы, в которых не может быть ни больше, ни меньше инициализаторов.
У меня получилось на макросах, и почти получилось на настоящем Си++. Но камнем преткновения стали двухмерные массивы, инициализируемые строчками по 4 символа.
#include <iostream>
#include <array>
#define consteval constexpr
using Char5 = std::array<char, 5>;
template <size_t N>
class CArray5
{
public:
using CppArray = const std::array<Char5, N>;
constexpr size_t size() const { return N; }
template <class ... Args>
consteval CArray5(Args ... x)
: fBuf { x... }
{
static_assert(sizeof...(Args) == N, "CArray size mismatch");
}
private:
CppArray fBuf;
};
namespace {
CArray5<3> names { Char5{"alph"}, Char5{"brav"}, Char5{"char"} };
// Как избавиться от этих преобразований Char5{...} ???????
}
int main()
{
std::cout << names.size() << std::endl;
return 0;
}