// TemplateDemo.cpp

#include <iostream>

using namespace std;

template <class T>
class bag {
  int size_;
public:
  bag(int size) : size_(size) 
  {};

  virtual ~bag() 
  {};

  template <class U>
  friend ostream& operator<< (ostream& os, bag<U>& b);
};

template <class T>
ostream& operator<< (ostream& os, bag<T>& b)
{
  return os << "teste: " << b.
  size_;
}

template <>
ostream& operator<<<int>(ostream& os, bag<int>& b)
{
  return os << "int: " << b.
  size_;
}

int main()
{
  bag<int> b(10);

  cout << b;
}