Ошибки, баги, вопросы - страница 2670

 

Ошибка тестера (ну или я что то перестал понимать)

Пропала сделка профита в тестере

 

Очередная встреча с ранее описанным багом - "Undefined Behavior, создаешь сложный несколько раз обернутый объект с внутренним типом "С", а там оказывается совсем другой тип данных, может "B", может "int", что хочешь...".
Фактически день ушел на локализацию, воспроизведение и поиск обходных путей, к сожалению все безрезультатно...
Ранее предложенный обходной пусть по использованию фиктивного шаблонного параметра, для нижеприведенного примера оказался не работоспособным.

template<typename _Tp, typename _Opt>
struct It_g{
   class Opt : public _Opt{}; 
   _Tp p;
};

template<typename _Tp>
class A_g{
public:
   struct It : public It_g<_Tp, Opt_g<_Tp>>{};
};

template<typename _Tp>
class V{
public:
   struct It : public  A_g<_Tp>::It{};
   It b;
};

template<typename _Tp>
class Opt_g{
   template<typename _It>
   static void test(_It &it){      
      printf(typename(_Tp));          // int
      printf(typename(it.p));         // ClassA*
      
      _Tp p = it.p;                   // Compiler Error: '=' - illegal operation use
   };
};


template<typename T>
class GetStructType{
public:
   struct type : public T{};
};

template<typename _It>
void test(_It &it){
   GetStructType<_It>::type::Opt::test(it);
}

class ClassA{};


void OnStart(){ 
   V<int> v1;
   test(v1.b);
   
   V<ClassA*> v2;
   test(v2.b);
   
   V<int>::It it3;
   test(it3);
   
   V<ClassA*>::It it4;
   test(it4);
}

Единственное рабочее решение удалось получить с использованием "самопального" auto type, но там дикие издержки на компиляцию с нулевым профитом в скорости работы реального кода...
Прошу помощи, возможно у кого-то есть идеи как это обойти.

 
Alexey Klenov:

Ошибка тестера (ну или я что то перестал понимать)

Визуализатор по архитектурным причинам не всегда показывает актуальное состояние.

 
fxsaber:

Визуализатор по архитектурным причинам не всегда показывает актуальное состояние.

Спасибо, буду иметь в виду.
 

Дефекты в работе кеша шаблонной функции/класса:
(не исправлено MT5(build 2361)) ***  (up)   Undefined Behavior, создаешь сложный несколько раз обернутый объект с внутренним типом "С", а там оказывается совсем другой тип данных, может "B", может "int", что хочешь...
(не исправлено MT5(build 2361)) *             Compile Error, баг при передаче в качестве const ref template аргумента указателя на функцию.
(не исправлено MT5(build 2361)) *             Compile Error, объект B<int> можно создать после объекта класса B<void*>, но если сделать это перед, то возникает ошибка компиляции.


Дефекты в работе шаблонной функции/класса:
(не исправлено MT5(build 2361)) *** (up)   Compile Error, баг внутри шаблонной функции, переданный указатель в рамках операции явного приведения типа ведет себя как класс в остальных случаях - как указатель.
(не исправлено MT5(build 2361)) **           Compile Error, баг с генерацией кода шаблонного класса при использовании internal class.
(не исправлено MT5(build 2361)) **           Compile Error, баг при попытке доступа к internal class для шаблонного параметра шаблонной функции.
(не исправлено MT5(build 2361)) *            Compile Error, баг при генерации шаблонного метода/класса, процесс "автозамены" шаблонного параметра выходит за пределы скоупа в основной код программы.
(не исправлено MT5(build 2361)) *            Compile Error, баг с отсутствием автоматической генерации кода шаблонного класса, когда шаблонный класс выступает в качестве return value для шаблонного метода.
(не исправлено MT5(build 2361)) *            Compile Error, баг при передаче internal struct в шаблонную функцию, полученный тип данных невозможно использовать как базовый тип данных для другой internal struct в шаблонном классе.
(не исправлено MT5(build 2361)) *            Compile Error, баг при вызове шаблонной функции с явным указанием типов аргументов, когда вызов выполняется из перегруженной нешаблонной функции.

(не исправлено MT5(build 2361))              Compile Error, баг при определении internal class - отсутствует возможность явно сослаться на глобальное пространство имен при указании базового класса.
(не исправлено MT5(build 2361)) *** (new) Compile Error,
Основная претензия к неуместному выводу warning - "deprecated behavior, hidden method calling will be disabled in a future MQL compiler version". Текущая реализация - это стрельба с  пушки по воробьям.
(не исправлено MT5(build 2361)) **  (new) Compile Error, баг касается возвращаемого значения шаблонной функции, когда возвращаемое значение - internal class, расположенный внутри шаблонного класса, тип параметра которого задается типом аргумента шаблонной функции.
(не исправлено MT5(build 2361)) *   (new) Compile Error, не выполняется проверка на наличие повторно использованных имен шаблонных типов при объявлении шаблонной функции внутри шаблонного класса, что приводит к неожидаемому поведению.
(не исправлено MT5(build 2361)) *   (new) Runtimer Error, в конструкторе базового класса невозможно выполнить explicit typecast по приведению указателя на объект базового класса к указателю на родительский класс.
(не исправлено MT5(build 2361))     (new) Compile Error, множество дефектов связанных с return "in place created" object, когда объектом выступает шаблонный класс/структура.


Дефекты связанные с несоответствием приоритетов вызовов перегруженных функций в MQL в сравнении с С++:
(не исправлено MT5(build 2361)) ***          Compile Error, когда есть наследование классов A <= B <= C <= D и реализованы две overloading функции, например одна c параметра А*, а вторая с B*, то передача в такую функцию объекта C* или D* в MQL вызывает ошибку компиляции "ambiguous call to overloaded function".
(не исправлено MT5(build 2361)) **           Runtime, Несоответствие приоритетов для вызовов перегруженных шаблонных функций.
(не исправлено MT5(build 2361)) **           Compile Error, приоритет вызовов перегруженных шаблонных функций в действительности зависит от типа шаблонного параметра, который, в теории ни как не должен влиять на результат компиляции.
(не исправлено MT5(build 2361)) **           Compile Error, при генерации кода шаблонной функции возникает ошибка компиляции несмотря на то, что имеется перегруженная шаблонная функция с подходящей сигнатурой для передаваемых параметров.


Дефекты связанные с медленным выполнением функций, работой оптимизатора кода:
(не исправлено MT5(build 2361)) **  (new) Runtime, большой overhead при добавлении по одному элементу в массив с помощью ArrayResize, не смотря на то, что память для них была заранее зарезервирована, например для структур аж до 7-ми раз медленнее.


Предложения:
ссылка - о предоставлении возможности передавать литералы и временные переменные в виде const ref аргументов функции.
ссылка - при перемещении файлов проекта во вкладке "Project", для перемещаемых файлов, которые открыты и находятся во вкладках ME, автоматически обновлять их путь расположения.
ссылка - о необходимости введения в MQL typedef declaration функциональности.
ссылка - о предоставлении возможности принудительной генерации дефолтных конструкторов копирования и операторов присвоения.

 
fxsaber:

Визуализатор по архитектурным причинам не всегда показывает актуальное состояние.

Alexey Klenov:
Спасибо, буду иметь в виду.

Лечится пуском нескольких тиков (F12) после постановки на паузу.

 
Andrey Khatimlianskii:

Лечится пуском нескольких тиков (F12) после постановки на паузу.

Спасибо. Попробую.

 
Sergey Dzyublik:

Очередная встреча с ранее описанным багом - "Undefined Behavior, создаешь сложный несколько раз обернутый объект с внутренним типом "С", а там оказывается совсем другой тип данных, может "B", может "int", что хочешь...".
Фактически день ушел на локализацию, воспроизведение и поиск обходных путей, к сожалению все безрезультатно...

Наконец-то удалось найти приемлемое решение.
Оказывается использование статического члена класса дает возможность обойти вышеописанный баг:

template<typename _Tp, typename _Opt>
struct It_g{
   class Opt : public _Opt{}; 
   _Tp p;
   
   static Opt opt;
};

template<typename _Tp, typename _Opt>
static It_g::Opt It_g::opt;


template<typename _Tp>
class A_g{
public:
   struct It : public It_g<_Tp, Opt_g<_Tp>>{};
};

template<typename _Tp>
class V{
public:
   struct It : public  A_g<_Tp>::It{};
   It b;
};


template<typename _Tp>
class Opt_g{
   template<typename _It>
   static void test(_It &it){      
      printf(typename(_Tp));          // ClassA*
      printf(typename(it.p));         // ClassA*
      
      _Tp p = it.p;                   // OK
   };
};


template<typename _It>
void test(_It &it){
   it.opt.test(it);
}

class ClassA{};


void OnStart(){ 
   V<int> v1;
   test(v1.b);
   
   V<ClassA*> v2;
   test(v2.b);
   
   V<int>::It it3;
   test(it3);
   
   V<ClassA*>::It it4;
   test(it4);
}
 

Как исправить эту ошибку хранилища?


Постепенно отказывает сохранять всё больше и больше файлов. Скоро всё, что хранится будет невозможно актуализировать.

 

Неправильно рассчитываются прибыли/убытки во всплывающей подсказке для buy stop limit ордеров и для sell stop limit ордеров.

При наведении мышкой на tp

при наведении мышкой на sl

Причина обращения: