🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: gnu.g++.bug
Article #673

Is this a bug?

#673
From: Douglas Campbell
Date: Mon, 04 Dec 1989 21:28
56 lines
2201 bytes
I don't know whether the following is a bug or not.  Help, please?

Suppose a function takes a class instance (called by value), and it is
called with  a  reference  to an instance,  which  is returned from  a
function.  That is, the function is declared as:
		fn (CoolClass i)
and called as:
		fn (rcc())	// rcc returns type CoolClass&

Then shouldn't the object pointed to by rcc()'s return value be copied
into an argument for  fn, using either  bitwise-copy or a user-defined
X(X&) constructor?

If not, what?  If so, why does this fail to compile with g++ 1.36.1 on
both Sun3 and Sun4 os4:

----------------------------------------------------------------------
#include <stream.h>

class IntClass
{
    int i;
  public:
    IntClass() { i = 17; }  // Constructor
    friend IntClass& same (IntClass& ic) { return ic; }
    friend void pr(IntClass ic) { cout << ic.i << "\n"; }
};

main(int argc, char *argv[])
{
    IntClass a;
    pr(same(a));
}
----------------------------------------------------------------------

The compilation goes:

	g++ -g -c  test.cc
	test.cc: In function int main (int, char **):
	test.cc:16: too many arguments for constructor `IntClass'
	test.cc:16: in base initialization for class `IntClass'

where line 16 is:     pr(same(a));

The following adjustments to the source cause the problem to disappear:
	*  Make pr() called by reference
	*  Replace line 16 with lines:  IntClass& b = same(a); pr(b);
	*  Delete constructor for IntClass

I have this uneasy feeling that there is a trivial explanation, and
I'm going to look pretty silly.  Oh well, the price of education.

					Much thanks,
					Doug Campbell
					doug@svax.cs.cornell.edu
Technical Details
Message-ID: <34845@cornell.UUCP>
Path: arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!cs.utexas.edu!swrinde!zaphod.mps.ohio-state.edu!sunybcs!uhura.cc.rochester.edu!rochester!cornell!doug

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!jarvis.csri.toronto.edu!cs.utexas.edu!swrinde!zaphod.mps.ohio-state.edu!sunybcs!uhura.cc.rochester.edu!rochester!cornell!doug
From: doug@asur.cs.cornell.edu (Douglas Campbell)
Newsgroups: gnu.g++.bug
Subject: Is this a bug?
Message-ID: <34845@cornell.UUCP>
Date: 4 Dec 89 21:28:39 GMT
Sender: nobody@cornell.UUCP
Reply-To: doug@cs.cornell.edu (Douglas Campbell)
Distribution: gnu
Organization: Cornell Univ. CS Dept, Ithaca NY
Lines: 56