🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: chorus.os.chorus
1 messages
1 total messages Started by Eric Valette Mon, 26 Mar 1990 09:04
pointer to member and pointer to function in SunC++ 2.0 (bug!)
#1
Author: Eric Valette
Date: Mon, 26 Mar 1990 09:04
115 lines
3470 bytes
/* 
 *	Pointer to member and pointer to "normal" function :
 *	C++ 2.0 should check the consistency of what is allowed and what
 *	is not !!
 *	
 *	
 *	The following program was written on sun3/80 (sunOS4.0) using the
 *	Sun C++ 2.0 compiler
 */


class A {
	
public:
	int i;
	
	A() {}
	int func(int a) { this->i = a; return a;}
};

typedef int (A::*ptMemberA) (int);
typedef int (*ptFuncValid) (A*,int); 
typedef int (*badPtFuncType)   (int);    

A a;

main()
{
		ptMemberA   pFunc1 	= &A::func;
		ptFuncValid pFunc2 	= (ptFuncValid) &A::func;
/* line 30 */ 	ptFuncValid pFunc3    	= (ptFuncValid) pFunc1;	

		// produce a compiler error(see below)		
		// What's the difference between
		// this line and the previous one !!!
		// (works with glockenSpiel prepocessor release 1.2 d)
		// I think it is a bug !!!
		// -----------------------
		
		// Now look at the following line witch is syntacticaly correct
		// but do not produce what is expected
	
		ptFuncValid pFunc4    =  (* ((ptFuncValid*) &pFunc1)) ;		
		
		// Yet another possible bug
		
		badPtFuncType pFunc5 = (badPtFuncType) &A::func;

		// The compiler should be able to detect that the first 
		// parameter expected by *pfunc5 is not a pointer to an object 
		// of class  A (and also be able to produce at least a warning 
		// if it is not the case)
		
		// Now have a look at functions calls
		
		((&a)->*pFunc1) (1);		// works
		(*pFunc2) (&a,1);		// correct
/* line 57 */	(*pFunc4) (&a,1);		// should do the same thing

		// in fact produces a bus error at run time !!
		// works with release 1.2d of glockenSpiel.
		//-------------------------------------------

//		(*pFunc1)(1);   this line is (of course) not correct but
//				would have exactly the same effect as the
//				next one :

		(*pFunc5) (1);	//is correct but produces a bug at run-time
				// (the value of this is 1 in the func 
				// member function.)
		

}

/*-------------------Cut here-----------------------------------------------*/
/*
if you compile this program using the following command :

CC -o pfunc pfunc.cxx

it produces :

CC  pfunc.cxx:
"pfunc.cxx", line 30: sorry, not implemented:  
pointer to member of not first base 1 error

(trying to understain the error message is hard, isn't it)

if you remove line 30, it compiles but produces a bus error 
due to line 57.
	
============================================================================

I'll like to know how I can write something correct whitch would have the same 
effect as the line 30 in the previous version of C++ (1.2 [a-e]) .

===========================================================================

thanks,

   __                 
  /  `                   	Eric Valette
 /--   __  o _.          	Chorus Systemes
(___, / (_(_(__         	6 avenue Gustave Eiffel
				F-78182, St-Quentin-en-Yvelines-Cedex

Tel: +33 (1) 30 57 00 22	Fax: +33 (1) 30 57 00 66
E-mail: ev@chorus.fr		or ev%chorus.fr@mcsun.EU.net

*/


                                
                               
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads