Новая версия платформы 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, потому что более подходящей (а нужна именно более подходящая, чтобы конфликт возник хотя бы теоретически) - нет