/* -----------------------------------------------------------------------------
 * See the LICENSE file for information on copyright, usage and redistribution
 * of SWIG, and the README file for authors - http://www.swig.org/release.html.
 *
 * std_pair.i
 *
 * std::pair typemaps for LUA
 * ----------------------------------------------------------------------------- */

%{
#include <utility>
%}
/*
A really cut down version of the pair class.

this is not useful on its owns is it needs a %template definition with it

eg.
namespace std {
    %template(IntPair) pair<int, int>;
    %template(make_IntPair) make_pair<int, int>;
}


*/



namespace std {
  template <class T, class U > struct pair {
    typedef T first_type;
    typedef U second_type;

    pair();
    pair(T first, U second);
    pair(const pair& p);

    T first;
    U second;
  };

  template <class T, class U >
  pair<T,U> make_pair(const T&,const U&);

}
