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

 

Билд 1881.  Баг компилятора.  Конструктор задан.  Если же убрать этот конструктор, то компилируется.

template<typename T>
struct A
{
  A() { }
  
  A arr[];  // 'arr' - default constructor of struct 'A<int>' is not defined
};

A<int> a;
 

Оказывается, шаблон тут ни при чём. Всё и без него прекрасно не компилируется:

struct A
{
  A() {  }
  
  A arr[];  // 'arr' - default constructor of struct 'A' is not defined
};

A a;
 
Такой код выжрет всю память.
 
fxsaber:
Такой код выжрет всю память.
С чего вдруг?
 
Alexey Navoykov:
С чего вдруг?

Рекурсия.

 
fxsaber:

Рекурсия.

Вы чего-то путаете.
 
Alexey Navoykov:
Вы чего-то путаете.

Скорее не понимаю, как здесь не может не быть рекурсии. Кто-нибудь рассудит.

 
fxsaber:

Скорее не понимаю, как здесь не может не быть рекурсии. Кто-нибудь рассудит.

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

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

 
Для чего может быть нужен такой код?
 
fxsaber:

Рекурсия.

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

class Amba
{
public:
        Amba _Arr[1];
};

1>speed.cpp(2503): error C2148: total size of array must not exceed 0x7fffffff bytes
 
Mesaoria:

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

Просто Вы неправильно перевели из MQL в С++
Причина обращения: