Немного о мысленном эксперименте ... Ингредиент 1: класс в (предварительно скомпилированной) разделяемой библиотеке, имеющий функцию, которая получает указатель на объект, полученный из ostream:
void ClassName::SetDefaultStream(std::ostream *stream)
Ингредиент 2:
Мой собственный класс, производный от std :: ostream, с некоторым обобщенным оператором шаблонного потока:
class MyStream : public std::ostream
{
public:
template <typename T> MyStream &operator<<(const T &data)
{
std::cout << data;
return *this;
}
}
Теперь, если я передам адрес экземпляра этого класса в метод SetDefaultStream, что произойдет? Во время компиляции компилятор не знает, какие типы будут применены к потоку в разделяемом классе, так что, конечно, никакой код не будет синтезирован? Будет ли он не скомпилироваться, скомпилируется, а затем потерпит крах при запуске, выйдет ли дым из компьютера?