Print

Print


  Hi Wilko,

  Ok, I committed:

diff -r1.7 XrdClientReadCache.hh
26c26
< #define min(a, b) (a < b ? a : b)
---
> #define xrdmin(a, b) (a < b ? a : b)
89c89
<       e = min(end_offs, fEndOffset);
---
>       e = xrdmin(end_offs, fEndOffset);

and

diff -r1.16 XrdOssConfig.cc
109c109
< #define max(a,b)       (a < b ? b : a)
---
> #define xrdmax(a,b)       (a < b ? b : a)
842c842
<                               max(fence,XrdOssFDMINLIM))) return -EINVAL;
---
>                               xrdmax(fence,XrdOssFDMINLIM))) return -EINVAL;

to the HEAD of CVS. Someone else can argue whether it should be std::max
and std:min if Andy has some aversion to using that.

                                   Pete

On Sat, Feb 26, 2005 at 03:27:32AM +0100, Peter Elmer wrote:
>   Hi Wilko,
> 
>   Ah, you are right, I see several instances of this in the xrootd code:
> 
> src/XrdOss/XrdOssConfig.cc:#define max(a,b)       (a < b ? b : a)
> 
> and
> 
> src/XrdClient/XrdClientReadCache.hh:#define min(a, b) (a < b ? a : b)
> 
> So this isn't a compiler bug, but redefinition of a keyword. We can change 
> them to "xrdmax" and "xrdmin". I'll do that (since I'm fixing a bunch of 
> other stupid things) unless somebody complains soon.
> 
>                                    Pete
> 
> On Fri, Feb 25, 2005 at 06:18:08PM -0800, Wilko Kroeger wrote:
> > Hello Pete
> > 
> > I am not sure if I was brave, but I installed gcc 3.4.3, but I still see
> > the error.
> > There is a gcc bugzilla report:
> >   http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16605
> > 
> > The problem is that min and max are defined as macros (where ?)
> > which confuses the compiler because std::min/max don't make sense anymore.
> > This report also says that in the standard min and max are reserved which,
> > I assume, means that there should be no min/max macros.
> > I have no idea where these macros are defined but might hunt around a
> > little bit.
> > 
> > 
> > Cheers,
> >   Wilko
> > 
> > 
> > On Sat, 26 Feb 2005, Peter Elmer wrote:
> > 
> > >   Hi Wilko,
> > >
> > >   As we discussed in the meeting the other day, we wonder if this is a
> > > problem (i.e. bug) with the latest version compiler itself.
> > >
> > >   I see that there is a gcc 3.4.3 out and that it is there in the Fedora
> > > development release:
> > >
> > >   http://download.fedora.redhat.com/pub/fedora/linux/core/development/i386/Fedora/RPMS/
> > >
> > > How brave are you? ;-)
> > >
> > >                                    Pete
> > >
> > > On Sun, Feb 13, 2005 at 03:21:11PM -0800, Wilko Kroeger wrote:
> > > > I tried to compile Xrootd (from the HEAD) on Fedora Core3 using
> > > > gcc 3.4.2 and './configure --build=debug'.
> > > >
> > > > It fails with the following error:
> > > >
> > > > Compiling XrdClientAbs.cc
> > > > In file included from
> > > > /usr/lib/gcc/i386-redhat-linux/3.4.2/../../../../include/c++/3.4.2/sstream:640,
> > > >                  from ../XrdClient/XrdClientDebug.hh:23,
> > > >                  from XrdClientAbs.cc:17:
> > > > /usr/lib/gcc/i386-redhat-linux/3.4.2/../../../../include/c++/3.4.2/bits/sstream.tcc:
> > > > In member function `virtual typename std::basic_stringbuf<_CharT, _Traits,
> > > > _Alloc>::int_type std::basic_stringbuf<_CharT, _Traits,
> > > > _Alloc>::overflow(typename _Traits::int_type)':
> > > > /usr/lib/gcc/i386-redhat-linux/3.4.2/../../../../include/c++/3.4.2/bits/sstream.tcc:104:
> > > > error: expected unqualified-id before '(' token
> > > > gmake[4]: *** [../../obj/i386_linux26_dbg/XrdClientAbs.o] Error 1
> > > >
> > > >
> > > > I could fix the problem by modifying  ./src/XrdClientDebug.hh,
> > > > adding
> > > >
> > > > #undef min
> > > > #undef max
> > > >
> > > > before the include statements (it has to be before #include <sstream>),
> > > > but I don't understand why I have to do this.
> > > > Is this something that has to be fixed ?
> > > >
> > > >
> > > > Cheers,
> > > >    Wilko
> > > >



-------------------------------------------------------------------------
Peter Elmer     E-mail: [log in to unmask]      Phone: +41 (22) 767-4644
Address: CERN Division PPE, Bat. 32 2C-14, CH-1211 Geneva 23, Switzerland
-------------------------------------------------------------------------