Баг компилятора. Массив в шаблонном классе: default constructor of struct is not defined - страница 2

 
Mesaoria:

Кстати, VС это еще на стадии компиляции чухнул ))

Вы ничего не перепутали?  Посмотрите ещё раз внимательно, какой код был у меня.
 
A100:
Просто Вы неправильно перевели из MQL в С++

да, не увидел, что у ТС массив пустой.

 
Alexey Navoykov:

Ну это ж вы делаете какие-то заявления. С вас и объяснения. 

К слову, данный код у меня прекрасно компилировался и работал на старых билдах, но я всё-равно с любопытством выслушаю вашу версию )

Понимаю, что рассчитываете на исходный нулевой ArraySize динамического массива. Поэтому в конструкторе с этим массивом ничего делать нельзя, чтобы не поймать рекурсию.

Про рекурсию поторопился, был не прав.

 

В общем, чтобы обойти этот баг, я нашёл 2 варианта решения:

1. Более замороченный:  поместить данный массив внутрь обёртки из класса и потом создавать/удалять динамический объект. Соответственно доступ к массиву становится более длинный (в плане синтаксиса)

2. Убрать все конструкторы из данной структуры, а от неё унаследовать другую структуру с конструкторами. Ну и тип массива поменять.  Правда такой вариант не всегда подойдёт.

struct _A
{ 
  _A arr[];
};

struct A : _A
{
  A() { }
};
 
Alexey Navoykov:

В общем, чтобы обойти этот баг, я нашёл 2 варианта решения:

А зачем усложнять?

struct A {
        A a[]; //нормально
        A() {}
};
 
A100:

Зачем усложнять?

Влияние очередности строк - круто.

 
Да уж, неожиданно! )  Спасибо.  Сколько ещё MQL таит в себе загадок чудных... Может и к другим багам удастся подобрать ключик )