Template Template Parameters and overload problems
 
Dear readers:
I met a problem and can't solve for a long time so any advices and
suggestions will be appreciated.
#include <iostream>
#include <string>
#include <set>
#include <map>
using namespace std;
template <typename T>
void printall(T const& t)
{
    typename T::const_iterator iter;
    iter= t.begin();
    while(iter != t.end()) {
        printone(*iter);
        ++iter;
    }
    std::cout << typeid(t).name() << std::endl;
    return;
}
template <typename T,  typename T1, template<typename T, typename T1>
class CONT >
void printone(const CONT<const T, T1> &t)
{
    std::cout << t.first /*<< " " << t.second */<< std::endl;
    return;
}
std::ostream& operator<< (std::ostream & out, std::set<int> & si)
{
    std::set<int>::iterator iter=si.begin();
    while(iter != si.end()) {
        out << *iter << " ";
        ++iter;
    }
    return out;
}
int main(void) {
    int di[] = {1, 3, 5, 7};
    set<int> ti(di, di+4);
    cout << ti << endl;
    map<string, set<int> > maps;
    maps["hello"] = ti;
    printall(maps);
    map<string, set<int> >::iterator iter = maps.begin();
    cout << (*iter).first << " " << (*iter).second << endl;
    return 0;
}
if I open the comment on line 22
    std::cout << t.first /*<< " " << t.second */<< std::endl;
to
    std::cout << t.first << " " << t.second << std::endl;
gcc will cry out
10.6.test.cpp:22: error: no match for 'operator<<' in 'std::operator<<
[with _Traits = std::char_traits<char>](((std::basic_ostream<char,
std::char_traits<char> >&)(+std::operator<< [with _CharT = char,
_Traits = std::char_traits<char>, _Alloc =
std::allocator<char>](((std::basic_ostream<char, std::char_traits<char>
&)(&std::cout)), ((const std::basic_string<char, std::char_traits<char>,
std::allocator<char> >&)((const std::string*)t))))), ((const char*)" ")) <<
t->std::pair<const std::string, std::set<int, std::less<int>,
std::allocator<int> > >::second'
thanks for your help.
andy
      [ See http://www.gotw.ca/resources/clcm.htm for info about ]
      [ comp.lang.c++.moderated.    First time posters: Do this! ]