On Sat, 1 May 2010 14:11:22 +0200 Marc Espie wrote: > On Sat, May 01, 2010 at 11:39:00AM +0200, Christopher Zimmermann wrote: > > Hi, > > > > the following piece of code compiles fine using g++ 4.2.4, but > > fails using g++ 3.3.5 in the base system: > > > > error: operands to ?: have different types > > > > It is part of ptlib, which is the base library for opal, which in > > turn is needed for ekiga, which I'm trying to port. > > > > What is your suggestion? Can anyone think of a workaround for > > this or should I just compile it using eg++ 4.2.4 ? > > > > > > Christopher > > > > > > #include<err.h> > > > > #define WarnIfNULL(x) ((x) ? (x) : (warn("blub"),(x))) > > > > class A > > { > > protected: > > int a; > > }; > > > > class B : A > > { > > public: > > void blub() > > { > > WarnIfNULL(A::a); > > } > > }; > > Why do some C++ programmer still use macros where they're not needed ? > bunch of idiots, let them stay with C. > > #include<err.h> > > template<typename T> > inline T WarnIfNULL(T x) > { > if (!x) > warn("blub"); > return x; > } > > class A > { > protected: > int a; > }; > > class B : A > { > public: > void blub() > { > WarnIfNULL(A::a); > } > }; >
ok, thanks. That seems to be the solution, still I have to wrap it in a macro, because I need __LINE__, __FILE__, __CLASS__...