Listing 7

/* set */

template <typename T>
class set
{
public:
  iterator begin();
  // ...
};

/* set.cpp */
template <typename T>
iterator set<T>::begin()
{
  // some implementation
}

/* mysource.cpp */
#include <set>
void f()
{
  set<int> l_set;
  // ...
}
#include "set.cpp"
template class set<int>;