Новая версия платформы MetaTrader 5 build 3091: Улучшения в работе - страница 20

 
Ilyas #:

Спасибо за предоставленный код. Ошибка исправлена, исправление войдёт в билд 3107

Отлично! По инлайнингу вопрос остался без ответа.

 
Это ошибка?
class A
{
  static void Print( const int& ) {} // Убрать &, и не будет ругаться.

  static void Func( void )
  {    
    Print(1); // WARNING: deprecated behavior, hidden method calling will be disabled in a future MQL compiler version
  }
};
 

По ALT+M не совсем верные сигнатуры выдаются.


class A
{
  void Func1()
  {
    class B
    {
    public:
      B() {}
    };
  }

  void Func2()
  {
    class B
    {
    public:
      B() {}
    };
  }
};
 
fxsaber #:
Это ошибка?

Сейчас нет, но будет ошибкой со временем - о чем и сообщает Warning

 
A100 #:

Сейчас нет, но будет ошибкой со временем - о чем и сообщает Warning

Имеется в виду ошибочность warning.

 
fxsaber #:

Имеется в виду ошибочность warning.

Он предупреждает, что со временем на его месте будет error

 
A100 #:

Он предупреждает, что со временем на его месте будет error

Мне понятен перевод англоязычного текста. Странной выглядит ситуация с &.

 
fxsaber #:

Мне понятен перевод англоязычного текста. Странной выглядит ситуация с &.

А в чем странность? Без & вызывается однозначно A::Print

С & сейчас вызывается ::Print, а (со временем) будет - ошибка

 
A100 #:

А в чем странность? Без & вызывается однозначно A::Print

Без & нет однозначности. Сигнатура ::Print неизвестна.

С & сейчас вызывается ::Print, а (со временем) будет - ошибка

С & есть однозначность.

 
fxsaber #:

Без & нет однозначности. Сигнатура ::Print неизвестна.

А где аргументы (сигнатура ::Print при которой в этом примере вызывалась бы она, а не A::Print) ?

Мой аргумент - какая бы ни была у ::Print сигнатура - все равно вызывается A::Print, потому что более подходящей (а нужна именно более подходящая, чтобы конфликт возник хотя бы теоретически) - нет