Boost logo

Boost :

From: Eric Niebler (eric_at_[hidden])
Date: 2004-07-01 01:56:39


Martin Wille wrote:
>
>
> STLPort implements std::min in the namespace _STL.
> BOOST_USING_STD_MIN() correctly expands to: using _STL ::min
>
> The (shortened) result of preprocessing is:
>
> namespace _STL {
>
> template <class _Tp>
> inline const _Tp& (min)(const _Tp& __a, const _Tp& __b) { return __b <
> __a ? __b : __a; }
> template <class _Tp>
> inline const _Tp& (max)(const _Tp& __a, const _Tp& __b) { return __a <
> __b ? __b : __a; }
>
> template <class _Tp, class _Compare>
> inline const _Tp& (min)(const _Tp& __a, const _Tp& __b, _Compare __comp) {
> return __comp(__b, __a) ? __b : __a;
> }
>
> template <class _Tp, class _Compare>
> inline const _Tp& (max)(const _Tp& __a, const _Tp& __b, _Compare __comp) {
> return __comp(__a, __b) ? __b : __a;
> }
>
> }
>
> (the complete preprocessed source can be found at:
> http://tinyurl.com/yrflf )
>
> I must be blind, I can't spot the line that hoists the contents of
> _STL:: into std::.
>

It's not there. STLPort must be #defining std to _STL.

>
>> In the worst case, I suppose for this compiler/library combination we
>> can import std::min/max into the boost namespace with a using
>> declaration and make BOOST_USING_STD_MIN() expand to nothing. Martyn,
>> can you try that and see if it works?
>
>
> Changing the source to
>
> namespace notboost
> {
> BOOST_USING_STD_MIN(); // moved to namespace scope
> template <typename T>
> T const &
> proxy_min(T const &p, T const &q)
> {
> return min BOOST_PREVENT_MACRO_SUBSTITUTION(p, q);
> }
> }
>
> indeed makes gcc-2.95.3 accept the code.
>

Well then, I guess that's what I'll do, unless somebody has a better
idea. I'll sleep on it first.

Thanks again, Martin.

-- 
Eric Niebler
Boost Consulting
www.boost-consulting.com

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk