>>129
何言ってんの?
C++のテンプレートも触ったことないの?

それ以前に、
コードのどこかに何かが有るか無いかでコンパイラの挙動が変わるのは、当たり前だし、
実行時にどこを通るか通らないかでプログラムの挙動が変わるのも、当たり前だ。
挙動が変わらなきゃ、一体どうするんだよw。もうどうでもいいや。

>>130
コンパイル時にもリンクエラーを吐き、
動的モジュールロード時にもエラーを吐くのさ。
どっちか諦めるのではなく、どっちもする。

動的にライブラリロードして、目的の関数が無かった場合に
実行時エラーになるのは、当たり前の挙動だわな。CやC++でも同じ挙動。
読み込んだライブラリにバグがあったんだから、仕方ない罠。
それ以上はどうしようもない。

>>132
(A*|B*) と (B*|C*) と (A*|B*|C*) はそれぞれ別の型で、何の関連性も無い。
だから、f(p)はリンクエラーだね。
正しくはこう。
bool f((A*|B*)p){return true;}
bool f((B*|C*)p){return false;}
void main(){
 ((A*|B*)|(B*|C*))p = (A*|B*) new B;
 f(p); //true
}
まーこんなコードを許すかどうかは言語仕様次第だが。
する奴居ないでしょ。面白いがな。