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__...