Баг компилятора в шаблонах (struct undefined)

 


Билд 1881. Ещё одна ошибка.  На этот раз нет никаких внутренних классов, но компилятор опять чем-то недоволен.  Код правильный. В С++ всё работает.

Если убрать переменную  с, то код компилируется нормально.

template<typename T>
struct B;

template<typename T>
struct A
{   
  int a;
  B<T> F() { return 0; }
};

template<typename T>
struct B : A<T>  // 'A' - struct undefined
{
  B(int) { }
  B() { }
};

template<typename T>
struct C : A<T>
{

};

B<int> b;
C<double> c;

В общем, что-то совсем туго с шаблонами (и не только) в нынешних версиях MQL.

 
B<T> F() { return 0; }

Каким образом ноль приводится к B<T>? Без этой строки, конечно, компилируется.

 
fxsaber:

Каким образом ноль приводится к B<T>? Без этой строки, конечно, компилируется.

В конструкторе
 
Alexey Navoykov:
В конструкторе

Ясно. Так и не смог четко понять, когда в подобных ситуациях вызывается конструктор, а когда оператор присваивания.

 
Я погорячился насчёт старых билдов, там тоже такое не компилируется.
 
Alexey Navoykov:
Я погорячился насчёт старых билдов, там тоже такое не компилируется.

Вопрос: https://www.mql5.com/ru/forum/1111/page2258#comment_8449962 

Ответ:  https://www.mql5.com/ru/forum/1111/page2259#comment_8454104

Ошибка по той же причине

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2018.08.20
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
 
A100:

Вопрос: https://www.mql5.com/ru/forum/1111/page2258#comment_8449962 

Ответ:  https://www.mql5.com/ru/forum/1111/page2259#comment_8454104

Ошибка по той же причине

Да уж, похоже у них эта реализация шаблонов как-то совсем запущена, что даже исправлять не решаются.

Но в моём случае даже перестановка ситуацию не спасает.

 

A100:

А вот в чём дело. У вас в обоих шаблонах параметр был int.  А если сделаете разные типы, то перестановка не поможет.

p.s.  А, не, вру.  В вашем коде работает с любыми типами.  А в моём коде компилируется только если одинаковые.

 
Alexey Navoykov:

A100:

А вот в чём дело. У вас в обоих шаблонах параметр был int.  А если сделаете разные типы, то перестановка не поможет.

p.s.  А, не, вру.  В вашем коде работает с любыми типами.  А в моём коде компилируется только если одинаковые.

Алексей, а зачем такие вычурные конструкции? (без наездов, само собой, просто любопытно). Вы компилятор тестируете, или практическую задачу какую-то решаете?

 
Mesaoria:

Алексей, а зачем такие вычурные конструкции? (без наездов, само собой, просто любопытно). Вы компилятор тестируете, или практическую задачу какую-то решаете?

А в чем вычурность? Поверьте далеко не все пишут в стиле старого MQL4 просто добавляя слово class
 
A100:
А в чем вычурность? Поверьте далеко не все пишут в стиле старого MQL4 просто добавляя слово class

В КБ только почему-то не видно.