minar@reed.bitnet (Nelson Minar,L08,x640,7776519) (10/22/90)
I have encountered something extemely nondesirable about how Turbo C++ 1.0 handles inline functions returning class instances. It seems to get very confused about them, and won't compile conditionals complaining about required destructors (explicitly declaring a destructor is no help). g++ 1.37.1 has no trouble at all compiling this same piece of code. Here is the error output of tcc: inlines.cpp: Error inlines.cpp 13: Destructor for Foo required in conditional expression in function test(int) Error inlines.cpp 13: Destructor for Foo required in conditional expression in function test(int) and here is the program: // This compiles under g++ 1.37.1, but will not compile in Turbo C++ 1.0 // with the compilation options '-y -v -vi- -N' or '-y -v -vi -N' #include <stdio.h> class Foo { public: Foo() {} // plain constructor Foo(int x) { value = x; } // constructor taking an int operator int() { return value; } // conversion int value; }; inline Foo test (int input) { return input == 1 ? Foo (4) : Foo (3); // line 13 - return a Foo } // depending on input void main() { Foo testVal; testVal = test(0); // testVal should be Foo(3) printf ("%d", int(testVal)); // g++ gives expected answer } Even weirder, this program will compile fine without inlining functions ('-vi-') but will give the same "Destructor required" errors when compiled with inlining functions ('-vi'), IF the conditional expression return input == 1 ? Foo (4) : Foo (3); is turned into the equivalent if-then construct: if (input == 1) return Foo(4); else return Foo(3); Not very useful, as I still can't inline the function. it will also compile ok if there are not multiple return points in the inlined function, say return Foo(input); Is this a bug, is it me being stupid about trying to learn C++, or just another 'interpretation' of the C++ 2.0 standard like Borland's for loop thing is? Its excessively annoying, as the function I am trying to inline really needs to be inlined. I think I'll have to switch to a macro, or some ugly function-with-side-effect answer. I haven't tried to get to tech support yet, partially because their tech support is a real pain, and partially because I do not know how to get Borland a copy of the source code. Is there ANY address on the Net that will get to a Borland tech? I don't care if I have to wait for a snail- mail reply... __ \/ minar@reed.bitnet You know in your heart its flat.