思考実験のビット...成分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メソッドに渡すと、どうなりますか?コンパイル時に、コンパイラは共有クラスのストリームにどのタイプが適用されるかわからないので、コードが合成されることはありませんか?コンパイルに失敗しますか、コンパイルして実行時にクラッシュしますか、コンピューターから煙が出ますか?