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); } };