Hi,

you write that "apparently", g++ 3.0 tries a longer conversion chain
than 2.95.  Indeed, the compiler message let us think so.  But to
verify this, I added traces into your testcase.  The result is that
both g++ versions use the same conversion chain (and indeed g++ 3.0
takes much longer to compile) :

$ ./a.out 
non const aios->aiosout

So the only problem here seems to be the compilation speed.  Perhaps
g++ 3.0 has to take into account more copy constructors for the
conversion chain computation than g++ 2.95 in order to comply with more
complex new C++ rules ?

-- 
Laurent.

#include <iostream>

using namespace std;

class aios {
  friend class aiosout;

public:
  aios (){}
  ~aios (){}
};

class aiosout {
  aiosout &operator= (const aiosout &);
public:
  aiosout (const aiosout &o){
    cout<<"const aiosout->aiosout"<<endl;
  }
  aiosout (aios &a) {
    cout<<"non const aios->aiosout"<<endl;
  }
  ~aiosout () {}
};

template<class T> inline const aiosout&
operator<< (const aiosout &o, const T &a)
{
  cout<<a<<endl;
  return o;
}

int main(void)
{
  aios a;
  a << 10;
}


Reply via email to