Инициализация constexpr std :: массив пар - PullRequest
4 голосов
/ 11 марта 2019

В C ++ 14 как инициализировать глобальный constexpr std::array из std::pair, содержащий текстовые строки?Следующее не работает:

#include <array>

constexpr std::array<std::pair<int, const char[]>, 3> strings = {
  {0, "Int"},
  {1, "Float"},
  {2, "Bool"}};

int main() {
}

1 Ответ

11 голосов
/ 11 марта 2019

Вы почти у цели.Прежде всего, тип char const[] должен быть указателем, потому что это неполный тип, который может не храниться в std::pair.А во-вторых, вам не хватает пары скобок.Правильное объявление будет выглядеть следующим образом:

constexpr std::array<std::pair<int, const char*>, 3> strings = {{
  {0, "Int"},
  {1, "Float"},
  {2, "Bool"},
}};

Требуются дополнительные фигурные скобки, поскольку std::array - это агрегат, содержащий необработанный массив C, и поэтому нам нужны явные упоминания фигурных скобок, чтобы {0, "Int"} не былоошибочно принят как инициализатор для внутреннего объекта массива.

...