#ifndef PAIR_H_
#define PAIR_H_

// class template definition has the template
// parameter ("Thing") in scope throughout
template <typename Thing> class Pair {
 public:
  Pair() = default;  // default constructor still initializes data members

  Thing get_first() const { return first_; }    // inline definition
  Thing get_second() const { return second_; }  // inline definition
  void set_first(const Thing& copyme);
  void set_second(const Thing& copyme);
  void Swap();

 private:
  Thing first_, second_;
};

// The compiler must see the definition for any template that is
// used.  That means customers of Pair.h need to be
// shown the definition of class Pair; one way to do this is to
// include the .cc file associated with the .h file right in
// the header, as follows.  This is the "inclusion compilation
// model."

#include "Pair.cc"

#endif  // PAIR_H_