// ---------
// Pairs.c++
// ---------
#include <cassert> // assert
#include <iostream> // cout, endl
#include <utility> // pair
#include "Pair.h"
template <typename T, typename U>
void pairs (
const typename T::first_type& v1,
const typename T::second_type& v2,
const typename U::first_type& w1,
const typename U::second_type& w2) {
typedef T pair_type1;
typedef U pair_type2;
{
const pair_type1 x;
assert(x.first == 0);
assert(x.second == 0);
}
{
const pair_type1 x(v1, v2);
assert( x.first == v1);
assert( x.second == v2);
assert(&x.first != &v1);
assert(&x.second != &v2);
}
{
const pair_type1 x(v1, v2);
const pair_type2 y = x;
assert(y.first == v1);
assert(y.second == v2);
}
{
const pair_type1 x(v1, v2);
pair_type2 y(w1, w2);
y = x;
assert(y.first == v1);
assert(y.second == v2);
}
{
assert(my_make_pair(v1, v2).first == v1);
assert(my_make_pair(v1, v2).second == v2);
}}
int main () {
using namespace std;
cout << "Pairs.c++" << endl;
pairs< pair<int, int>, pair<double, double> >(2, 3, 4.5, 6.7);
pairs<my_pair<int, int>, my_pair<double, double> >(2, 3, 4.5, 6.7);
int i = 2;
int j = 3;
// pair<int&, int&> p(i, j); // error: forming reference to reference type 'int&'
cout << "Done." << endl;
return 0;}
syntax highlighted by Code2HTML, v. 0.9.1