Erreurs, bugs, questions - page 1877

 
Sergey Dzyublik:
Veuillez me dire s'il est prévu d'ajouter l'utilisation de modèles à l'union, afin que vous puissiez le faire :
Contournement - voir comment cela est mis en œuvre dans TypeToBytes.
 
L'erreur est-elle correcte dans ce cas ? Comment peut-on le contourner sans enlever la Const ?
struct STRUCT
{
  const MqlTick Data;
  
  STRUCT( MqlTick &Tick ) : Data(Tick) {} // 'Data' - constructor not defined
};
 

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Bugs, bugs, questions

fxsaber, 2017.04.10 16:23

Création de surcharges de modèles inutiles qui provoquent des erreurs de compilation.
template <typename T>
T Func()
{
  T Res;
  
  return(Res);
}

template <typename T>
void Func( T& Value )
{
  T Res = (MqlTick)Value;
}

void OnStart()
{
  Func<string>(); // без этой строки компилируется
  
  MqlTick Tick;
  
  Func(Tick);
}

Le compilateur essaie de créer un

void Func( string& );
1595 - jamais réparé.
 
Conseiller
input int i = 0;

void OnInit() {}

Paramètres de l'optimiseur 1595

La brute-optimisation a pris 5,5 minutes, ce qui est pour le moins incorrect.

Tous les journaux sont dans le fichier joint. Veuillez signer si c'est reproductible ou non.

Dossiers :
Tester.zip  24 kb
 
fxsaber:
1595 - jamais réparé.


Enlevez l'explicite Struct cast et tout fonctionne.

template <typename T>
T Func(){
  T Res;
  return(Res);
}

template <typename T>
void Func( T& Value ){
  T Res = Value;
}

void OnStart()
{
  Func<string>(); 
  
  MqlTick Tick;
  Func(Tick);
}


 
Sergey Dzyublik:


Enlevez l'explicite Struct cast et tout fonctionne.

Les développeurs ont confirmé l'erreur dans le SD. Regardez bien, le plâtre n'est pas là.
 
fxsaber:
Les développeurs ont confirmé l'erreur dans le SD. Regardez bien, le casting n'est pas là.

template <typename T>
void Func( T& Value )
{
  T Res = (MqlTick) Value;
}
Comment s'appelle donc cette opération ?
 
Sergey Dzyublik:


Enlevez l'explicite Struct cast et tout fonctionne.

Deux questions.

1. Qu'est-ce que ce code enregistre ?

2. comment le cast est-il lié au bug de la sélection de la surcharge de fonction correcte ?

 
Sur MT5 1595 32bit, tout fonctionne à la perfection (Win7 64bit) :


template <typename T>
T Func(){
  T Res;
  Print (__FUNCTION__);
  return(Res);
}

template <typename T>
void Func( T& Value ){
  Print (__FUNCTION__);
  T Res = Value;
}

void OnStart()
{
  Func<string>(); 
  
  MqlTick Tick;
  Func(Tick);
}

Résultat :
2017.04.26 14:51:14.834 WebTest (EURUSD,H4) Func<string>
2017.04.26 14:51:14.836 WebTest (EURUSD,H4) Func<MqlTick>


Pas de bug avec la sélection des fonctions, comment cela peut-il être lié au fait qu'il n'y en a pas))
 
Sergey Dzyublik:

Quel est le nom de cette opération alors ?

Cette opération n'a plus de nom aujourd'hui (1589+). Je pense que quand vous comprenez d'où vient Warning

template <typename T>
T Func(){
  T Res;
  return(Res);
}

template <typename T>
void Func( T Value ){
  T Res = (int)Value; // implicit conversion from 'number' to 'string'
}

void OnStart()
{
  Func<string>(); 

  Func(0);
}

vous comprendrez de quel problème nous parlons.