Boost logo

Boost :

From: e_d_k_at_[hidden]
Date: 2001-05-23 14:01:57

Problems with type_traits

I want to write something like this:

   int x =7;
   double f=98.6;

   pair<iint, double> p1(x,f);
   pair<int,double&> p2(x,f);
   cout << p1.second << endl; // prints 98.6
   cout << p2.second << endl; // prints 98.6
   f = 9.8;
   cout << p1.second << endl; // prints 98.6
   cout << p2.second << endl; // prints 9.8

Of cource this is not posable with std::pair.

So I decided to write an improved pair. I started with the following
code copied form "boost_1_21_2/libs/type_traits/c++_type_traits.htm"

  template <typename T1, typename T2>
  struct pair
     typedef T1 first_type;
     typedef T2 second_type;

     T1 first;
     T2 second;

     pair(boost::add_reference<const T1>::type nfirst,
          boost::add_reference<const T2>::type nsecond)
     :first(nfirst), second(nsecond) { }

but I got errors, starting with :

  Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
  Error E2089 C:\cpplibs\edklib\edk_lib/pair.hpp 46: Identifier 'type' cannot have a type qualifier

After much fiddling around I got the following to work.

  template <class T1, class T2>
  struct pair
    typedef T1 first_type;
    typedef boost::add_const<T1>::type const_first_type;
    typedef boost::add_reference<const_first_type>::type const_ref_first_type;
    typedef T2 second_type;
    typedef boost::add_const<T2>::type const_second_type;
    typedef boost::add_reference<const_second_type>::type const_ref_second_type;

    typename T1 first;
    typename T2 second;

    pair (const_ref_first_type a,
          const_ref_second_type b)
          : first(a), second(b) {}


I thought I'd solved my problems, until, I tied to compile this:

     pair<int, double> p3(42,9.989);

I got this error:

  Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
  Error E2285 pairtst.cpp 30: Could not find a match for 'pair<int,double>::pair(int,double)' in function main()

Can anyone help me figure out what's wrong and how to fix it?

After I get this working I'd like to write a working make_pair template,
but I can work around that if nessisary.

Thank you,



Boost list run by bdawes at, gregod at, cpdaniel at, john at