0

Когда можно опустить внешние фигурные скобки в списке инициализации?

9

Я получаю ошибку C2078 в VC2010 при компиляции следующего кода:

struct A
  {
  int foo;
  double bar;
  };

std::array<A, 2> a1 = 
  // ошибка C2078: слишком много инициализаторов
  {
    {0, 0.1},
    {2, 3.4}
  };

// OK
std::array<double, 2> a2 = {0.1, 2.3};

Я обнаружил, что корректный синтаксис для a1 выглядит так:

std::array<A, 2> a1 = 
  {{
    {0, 0.1},
    {2, 3.4}
  }};

Вопрос в том, почему дополнительные фигурные скобки требуются для a1, но не нужны для a2?

Обновление

Проблема, похоже, не специфична для std::array. Вот несколько примеров:

struct B
  {
  int foo[2];
  };

// OK
B meow1 = {1,2};
B bark1 = {{1,2}};

struct C
  {
  struct 
    { 
    int a, b; 
    } foo;
  };

// OK
C meow2 = {1,2};
C bark2 = {{1,2}};

struct D
  {
  struct 
    { 
    int a, b; 
    } foo[2];
  };

D meow3 = {{1,2},{3,4}};  // ошибка C2078: слишком много инициализаторов
D bark3 = {{{1,2},{3,4}}};

Я все еще не понимаю, почему struct D вызывает ошибку, а B и C — нет.

0 ответ(ов)

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь