C ++ оценивает значения массива шаблонов constexpr во время компиляции - PullRequest
0 голосов
/ 21 июня 2019

Я создаю массив упакованных символов во время компиляции, но c ++ говорит мне, что выражение должно иметь постоянное значение - не может оценить значение неполного градиента <256U>.

Iя пытаюсь встроить цветовой градиент в мой код из кода.

template<unsigned S>
struct gradient {
  constexpr gradient() : arr() {
    for (auto i = 0; i < S; i++)
      for (auto j = 0; j < S; j++)
        arr[i + j * S] = ((i % 256) << 24) | ((j % 256) << 16) | (((i * j) % 256) << 8) | 255;
  }

  unsigned arr[S * S];
};

constexpr auto g0 = gradient<255>(); // ok
constexpr auto g1 = gradient<256>(); // error
constexpr auto g2 = gradient<1024>(); // error

Внезапно я не могу создать свою структуру градиента с более высокими значениями, чем 255. Но почему?

...