Boost logo

Boost :

From: gmelquio_at_[hidden]
Date: 2003-08-12 22:58:36


En réponse à Beman Dawes <bdawes_at_[hidden]>:

> Current GCC and Intel compilers don't appear to allow using declarations
> at function scope, according to a bug report.

What do you call "current"? As far as I know, only gcc 2.95 suffers from this
bug (bug-report #1981 in gcc database), gcc 3.x and intel (on linux) correctly
handle using declarations at function scope. I can tell because in the interval
library, there is a workaround (using declaration at namespace scope) only
activated with gcc 2.95.

> Is there any reason not to just move the using declarations to namespace
> scope?
>
> Answering my own queston, I think prefer the solution used in other
> boost code where calls to say std::abs are explicitly qualified, and ifdef
> BOOST_NO_STDC_NAMESPACE then namespace std { using ::abs; } is
> supplied.
>
> What are the pros and cons of the different approaches?

If the purpose is to access a std:: function, I don't think there is much of a
difference between the two approaches. I find the second one a bit more clean.

However, if the user is allowed to provide its own type and its own function,
the second approach doesn't work anymore. Here is what I mean:

namespace my_namespace {
  template <typename T> struct my_type;
  template <typename T> my_type<T> abs(my_type<T>);
}
namespace boost {
  template <typename U> void a_function(U u) {
    do_something(std::abs(u));
  }
}
my_namespace::my_type<int> v;
boost::a_function(v);

This code won't compile because the compiler can't find my_namespace::abs in
boost::a_function. If the first approach (using declaration at namespace scope)
had been used, it would have worked.

Regards,

Guillaume


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