* Vegard Nossum ([email protected]) wrote: > Hi, > > urcu/compiler.h defines min and max as macros, which leads to problems > with standard C++ headers (and other libraries, probably). For > example, the following program does not compile: > > #include <valarray> > #include <urcu-qsbr.h> > > int main(int argc, char *argv[]) > { > std::valarray<int>().max(); > return 0; > } > > $ g++ -I userspace-rcu-0.6.4 -L userspace-rcu-0.6.4/.libs test.cc -lurcu-qsbr > test.cc:6:34: error: macro "max" requires 2 arguments, but only 1 given > test.cc: In function ‘int main(int, char**)’: > test.cc:6: error: statement cannot resolve address of overloaded function > > Remove the urcu-qsbr.h include and it compiles correctly. > > I think the best fix is to either define min and max privately (not > export them) or define them using one of the rcu_ or cmm_ prefixes. > For now, my workaround is to always #undef min and #undef max after > including urcu-qsbr.h.
I'll use the caa_ prefix (which stands for Concurrent Architecture Abstraction): caa_min, caa_max. It is fixed in commit 2f8a5ae7266ad4fb9ba77cfa1b4a7104d0465096 Thanks for reporting this! Mathieu > > > Vegard > > PS: This compiler error is also sensitive to the order of the > includes, the use of other standard headers, and/or the version of the > standard headers. For example, some versions of the GNU implementation > of <algorithm> will #undef min and max. > > _______________________________________________ > ltt-dev mailing list > [email protected] > http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev -- Mathieu Desnoyers Operating System Efficiency R&D Consultant EfficiOS Inc. http://www.efficios.com _______________________________________________ ltt-dev mailing list [email protected] http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev
