doxygen にハマる

以前から興味があった doxygen を今日ようやく使ってみた.“ソースとドキュメントの一元化”って素晴らしい.もしこの魅力を B3 の時に知っていたら,実験で提出を求められた仕様書を作成する気力なんて更になくなってただろうね.

ここで覚え書き.
クラステンプレートのフレンド関数のプロトタイプには関数名の直後に <T> を書く必要がある (gcc 3.3.2 でコンパイル成功を確認済み) んだけども,


/// RGB を扱うクラステンプレート (一部省略)
template <typename T> class Color
{
public:
    T   red, green, blue;
    /**
     * @brief RGB をストリームに書き出す
     * @param [in,out] os 出力ストリーム
     * @param [in] col Color<T> 型オブジェクト
     * @return 出力ストリーム
     */
    friend std::ostream&  operator << <T>(std::ostream& os, const Color<T>& col);
}

のようなソースから doxygen によって作成される HTML ドキュメントでは,operator << () 関数に限って << が削除されてしまう (doxygen 1.4.3, 1.4.6 で共に確認).<T>を削除して再度 doxygen に通せば正しい出力が得られたから,これはたぶん doxygen のバグなんだろう.