Visual C++: クラスのprivateな継承で「ハンドルされていない例外」

WindowsアプリをVisual C++で開発していて、以下のエラーになることがあった。

XXXXXXXX.exe の 0xXXXXXXXX でハンドルされていない例外が発生しました: 
Microsoft C++ の例外: CFooError (メモリの場所 0xXXXXXXXX)。

上記はVisual Studioデバッグしているときのメッセージで、普通に起動していると以下のメッセージが出る。

Runtime Error!
Program: XXXXXXXX
this application has requested the Runtime to terminate it in an unusual way.
please contact the application's support team for more information. 

しかし、自分としてはちゃんと例外はキャッチしているのにな?と最初は分からなかった。以下のように親クラスでキャッチしているつもりだった。

	try {
		// ....
	}
	catch (CBarError e) {
		// ここに到達する前にRuntime Errorのメッセージが出る。
	}

悪かったのは例外クラスの継承のさせ方。

class CFooError : CBarError
{
};

publicな継承にしていなかったので指定なしのclassの継承はprivateになっていた。普通にpublicを指定すれば、OK。

class CFooError : public CBarError
{
};

最近、Javaが多かったもので…と言い訳。