[comp.lang.c++] Turbo C++ Bug?

umrigar@bingvaxu.cc.binghamton.edu (Zerksis D. Umrigar) (08/14/90)

When I attempt to run the following program under Borland's Turbo C++
v1.0 under MS-Dos v3.1 on a PC-AT, I get the error messages shown
below.  The program works fine under GNU's g++ 1.35.  Am I correct
in surmising that there is a bug in the compiler, or am I missing
something here?

Thank you.

-zerksis umrigar
======
------------------------CUT HERE----------------------------------
/*

The following program is an abstract program which exhibits what
appears to be a bug in TCpp 1.0.  The compiler signals an error
when the LAST default parameter for a constructor is initialized
by a constructor for some other class.  A workaround is to add an
extra dummy default parameter of some predefined type like int.
Note also that this program works fine under FSF's GNU g++ v1.35
--- the only change required is to change iostream.h to
stream.h.

*/ 

#include <iostream.h>

class Y {
  int val;
public:
  Y(int a = 0) { val = a; }
  int get() { return val; }
};

class X {
  friend ostream& operator<<(ostream&, X&);
  int a;  
public:
  X(int i) { a = i; }
  X(Y y = Y(0)/* , int dummy=0 */ ) { a = y.get(); } // **Problem here!*
  void f(Y y = Y(0));	//Note that a non-constructor handles default
  			//parameter constructor initialization ok.
};

void X::f(Y y) { a += y.get(); }

ostream & operator<<(ostream & os, X& x)
{
  return os << x.a;
}

main()
{
  Y y1(4);		//y1.val==4;
  X x1(2), x2, x3(y1);	//x1.a==2; x2.a==0; x3.a==4;

  x1.f(y1);  x2.f(y1);	//x1.a==6; x2.a==4;

  cout << x1 << " " << x2 << " " << x3 << "\n";	//Should print "6 4 4\n".
}


/*		COMPILATION LOGS:

--LOG OF COMPILATION WITH dummy PARAMETER COMMENTED OUT:

Turbo C++  Version 1.00 Copyright (c) 1990 Borland International
noerror.cpp:
Error noerror.cpp 28: ) expected
Error noerror.cpp 43: Could not find a match for 'X::X()' in function main()
Error noerror.cpp 43: Could not find a match for 'X::X(Y)' in function main()
*** 3 errors in Compile ***

        Available memory 102528

--LOG OF COMPILATION WITH dummy PARAMETER INCLUDED.

Turbo C++  Version 1.00 Copyright (c) 1990 Borland International
noerror.cpp:
Warning noerror.cpp 28: Parameter 'dummy' is never used in function X::X(Y,int)
Turbo Link  Version 3.0 Copyright (c) 1987, 1990 Borland International

        Available memory 109552

--Program executes and prints
6 4 4
--as expected.

*/
------------------------------------------------------------------

ccastdf@prism.gatech.EDU (Dave) (12/06/90)

Whenever I set the text mode to 50 collumns, cout still scrolls it at
24 collumns.  Is there any way to make it scroll at 50 like it should?

btw, I do a textmode(C4350);

Thanks,

Dave
-- 
David Frascone 
Georgia Institute of Technology, Atlanta Georgia, 30332
uucp:	  ...!{decvax,hplabs,ncar,purdue,rutgers}!gatech!prism!ccastdf
Internet: ccastdf@prism.gatech.edu