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

 
Putnik #:

Версия последняя, Atom.

Пробовал Google Chrome, Firefox. Ативирус отключен, AdGuard отключен.

Карты нет.

Вам же четко написали обновить IE    Internet Explorer Другие браузеры не трогайте

 
A100 #:

Другими словами

#undef MACRO - безусловно!

 
Mikhail Dovbakh #:

Как минимум - заставило поправить код.

А почему Вы решили, что в шаблоне только простые типы могут быть?

template<typename T>
int f( const T& t )
{
    if (typename(T) == "string")
        return -1;
    else
        return t == (T)(-1);
}
class A {
public:
        int operator==( int i ) const { return 3; }
};
void OnStart()
{
    f(""); //нормально
    A a;
    f( a ); //Error: !!!
}

Т.е. после Вашей правки код вообще не работает, а до этого Warning только был

 
Slava #:

#undef MACRO - безусловно!

Давайте уберем #undef вообще:

//build 4076
#define MACRO   1
#ifndef MACRO
/*#else//это комментарий*/
#define MACRO   3
#endif
void OnStart()
{
    Print( MACRO );
}

Результат:   3

Ожидалось: 1

 
A100 #:

Давайте уберем #undef вообще:

Результат:   3

Ожидалось: 1

Проблема сводится к тому, можно ли закомментить директиву препроцессора.

 
JRandomTrader #:

Проблема сводится к тому, можно ли закомментить директиву препроцессора.

Это только разработчики могут сказать:

#ifndef MACRO
#define MACRO   1
/*#else//это комментарий*/
#define MACRO   2 //Warning: macro 'MACRO' redefinition
#endif

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

 
JRandomTrader #:

Проблема сводится к тому, можно ли закомментить директиву препроцессора.

Проблема сводится к тому, что препроцессор непредсказуем.
 
Это ограничение MQL5 или просто нельзя делать перегрузку шаблонной функции?
template <typename T>
void Func( void ) { Print(__FUNCSIG__); }

void Func( void ) { Print(__FUNCSIG__); }

void OnStart()
{
  Func<int>();
  Func();
}


Почему сигнатура шаблонной функции так хитро формируется?

template <typename T>
void Func( void ) { Print(__FUNCSIG__); }

void OnStart()
{
  Func<int>(); // void "void OnStart()"::Func<int>()
}
 
fxsaber #:
template <typename T> void Func( void ) { Print(__FUNCSIG__); } void Func( void ) { Print(__FUNCSIG__); } void OnStart() {   Func<int>();   Func(); }
template <typename T>
void Func( void ) { Print(__FUNCSIG__); }
template<typename T>
struct THelper{}; 
//----
class A
{
public:
  template <typename T>
  A(const THelper<T>&) { Print(typename(T)); }
};

void OnStart()
{
  Func<int>();
  Func<double>();
  Func<A>();
  Func<string>();
}

2023.11.27 04:12:44.694 Sig (ETHUSD,M1) void "void OnStart()"::Func<int>()

2023.11.27 04:12:44.708 Sig (ETHUSD,M1) void "void OnStart()"::Func<double>()

2023.11.27 04:12:44.708 Sig (ETHUSD,M1) void "void OnStart()"::Func<A>()

2023.11.27 04:12:44.708 Sig (ETHUSD,M1) void "void OnStart()"::Func<string>()


 
Mikhail Dovbakh #:

Не понял.

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