Bit d'une expérience de pensée ... Ingrédient 1: Une classe dans un (précompilés) bibliothèque partagée qui a une fonction qui prend un pointeur vers un objet dérivé de ostream:fonction de modèle transmis à la bibliothèque partagée (C++)
void ClassName::SetDefaultStream(std::ostream *stream)
Ingrédient 2:
Ma classe dérivant de std :: ostream, avec un certain opérateur de flux générique basé sur un modèle:
class MyStream : public std::ostream
{
public:
template <typename T> MyStream &operator<<(const T &data)
{
std::cout << data;
return *this;
}
}
maintenant, si je passe l'adresse d'un instantiati de cette classe dans la méthode SetDefaultStream, que va-t-il se passer? Au moment de la compilation, le compilateur n'a aucune idée des types qui seront appliqués au flux dans la classe partagée, donc aucun code ne sera synthétisé. Va-t-il échouer à compiler, compilera-t-il, puis tombera-t-il en panne, fumera-t-il de l'ordinateur?