RapidXML でのコンパイルエラー

RapidXML を使用していて良く分からないコンパイルエラーが発生したのでメモ.以下のコードをコンパイルしようとするとエラーが発生しました.

#include <iostream>
#include <istream>
#include <fstream>
#include <string>
#include <vector>
#include "rapidxml/rapidxml.hpp"

template <
    class CharT,
    class Traits = std::char_traits<CharT>
>
class xmlwrapper {
public:
    typedef CharT char_type;
    typedef std::basic_string<CharT, Traits> string_type;
    
    void output(std::basic_istream<CharT, Traits>& in) {
        std::vector<CharT> v;
        while (1) {
            CharT tmp[65536];
            in.read(tmp, sizeof(tmp));
            if (in.gcount() <= 0) break;
            v.insert(v.end(), tmp, tmp + in.gcount());
        }
        
        // これらだとコンパイル・エラーにならない.
        // rapidxml::xml_document<char> doc;
        // rapidxml::xml_document<> doc;
        rapidxml::xml_document<CharT> doc;
        doc.parse<0>(reinterpret_cast<CharT*>(&v.at(0)));
        
        typedef rapidxml::xml_node<CharT>* node_ptr;
        for (node_ptr pos = doc.first_node(); pos; pos = pos->next_sibling()) {
            std::cout << "[" << pos->name() << "]" << std::endl;
        }
    }
};

int main(int argc, char* argv[]) {
    if (argc < 2) std::exit(-1);
    
    std::ifstream ifs(argv[1]);
    xmlwrapper<char> xml;
    xml.output(ifs);
    
    return 0;
}

問題となっているのは,doc.parse<0>() の部分.コメントに書いたように,CharT とテンプレート・パラメータのままにしておかずに,明示的に char を指定するとコンパイルに成功しました.エラーメッセージは以下のような感じ.

$ g++ -I.. -Wall example_rapidxml.cpp
example_rapidxml.cpp: In member function `void xmlwrapper<CharT, Traits>::output(std::basic_istream<_CharT, _Traits>&) [with CharT = char, Traits = std::char_traits<char>]':
example_rapidxml.cpp:41:   instantiated from here
example_rapidxml.cpp:27: error: invalid use of member (did you forget the `&' ?)
$ g++-4 -I.. -Wall example_rapidxml.cpp 
example_rapidxml.cpp: In member function 'void xmlwrapper<CharT, Traits>::output(std::basic_istream<_CharT, _Traits>&) [with CharT = char, Traits = std::char_traits<char>]':
example_rapidxml.cpp:41:   instantiated from here
example_rapidxml.cpp:27: error: invalid operands of types '<unresolved overloaded function type>' and 'int' to binary 'operator<'

gcc 3.x のエラーメッセージだと意味が良く分からなかったのですが,gcc 4.x のエラーメッセージを見ると,どうやら doc.parse<0>() の <0 の部分が <演算子として認識されている模様.

解決策が分からなかったので,しばらくは char 決め打ちで・・・