Оператор перегрузки << для вложенного шаблона класса

У меня есть следующие настройки:

template< class T >
struct Foo {

  struct Bar {
    Bar ( const T &t ) : otherT_( t ) {}

    T otherT_;
  };

  Foo ( const T &t ) : myT_( t ) {}

  T myT_;
};

Теперь я хочу сделать примерыFoo< T >::Bar пригодный для std :: cout и друзей. Я попробовал это:

template< class T >
std::ostream& operator<< ( std::ostream &os, 
                           const typename Foo< T >::Bar &bar ) {
  os << "<bar: " << bar.otherT_ << ">";
  return os;
}

Но следующий код не компилируется:

  Foo< int > foo( 5 );
  Foo< int >::Bar bar( 7 );

  std::cout << bar << std::endl;

Я думаю, что компилятор не может вывести типT или что-то. Есть ли способ заставить такие экземпляры вложенного класса вести себя хорошо сoperator<<?

Спасибо!

Ответы на вопрос(3)

Ваш ответ на вопрос