ev@chorus.fr (Eric Valette) (10/24/90)
/* * * The following program compiles when using Cfront 2.0. * * The syntax used in function f() to call the foo::new operator seems * to be incorrect for g++1.37.1. (this syntax is described in * " the annotated C++ reference manual" by A. Ellis & B Stroustrup * p 60. * * What is the correct syntax for g++1.37.1? * * NB : I can not use a global __user_new operator (I have exactly the * same problem in many classes). * * I need an answer in order to compile the chorus kernel with g++ !! * * Thanks, * */ extern "C" { char * malloc(int size); void free(void*); } // typedef unsigned long size_t; // for g++ typedef unsigned int size_t; class foo { char * ptrData; int x; public: foo (int j); int get () {return x;} void* operator new (size_t , int stringSize); void* operator new (size_t) {return 0;} // just to make Cfront 2.0 happy // (needed for global object) void operator delete (void*); }; void* foo::operator new (size_t fooSize, int stringSize) { return malloc(fooSize + stringSize); } void foo::operator delete (void* ptr) { free(ptr); } foo::foo (int j) { x =j; ptrData = ((char *) this + sizeof(foo)); } int f() { // with g++ I get a parse error on the following line : foo *ptr = new (100) foo(2); return ptr->get(); } /* * * __ / ` Eric Valette /-- __ o _. Chorus Systemes (___, / (_(_(__ 6 avenue Gustave Eiffel F-78182, St-Quentin-en-Yvelines-Cedex Tel: +33 (1) 30 64 82 00 Fax: +33 (1) 30 57 00 66 E-mail: ev@chorus.fr or ev%chorus.fr@mcsun.EU.net * * */