This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/33518] New: unused code changes the result of name lookup
- From: "marc dot glisse at normalesup dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 21 Sep 2007 15:40:04 -0000
- Subject: [Bug c++/33518] New: unused code changes the result of name lookup
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
Hello,
I know this may look like issue #15910, but please read still. g++ refuses to
compile the following code because it wants to use std::distance. But if I
remove the code about "class Wx", which is not used anywhere, g++ now uses
::distance without complaining. Whichever the right answer is, g++ is not being
consistent here. Note that comeau and sunCC both use ::distance in both cases.
#include <iterator>
namespace boost
{
namespace detail {
struct empty_base {};
using std::distance;
}
template <class T, class B = ::boost::detail::empty_base>
struct ordered_field_operators1 {};
}
namespace CGAL {
template <class NT_>
class Quotient
: boost::ordered_field_operators1< Quotient<NT_> >
{
};
class MP_Float{};
namespace INTERN_MP_FLOAT {
double to_double(const MP_Float&);
double to_double(const Quotient<MP_Float>&);
}
template <class T> class Wx{};
template <> class Wx< MP_Float >
{
public:
class To_double
{
public:
double operator()( const MP_Float& x ) const {
return INTERN_MP_FLOAT::to_double( x );
}
};
};
}
typedef CGAL::Quotient<CGAL::MP_Float> NT;
namespace C{
template <class T> struct TutorialR{};
template <class T> struct Point{};
}
typedef C::Point<C::TutorialR<NT> > Point;
double distance(const Point & p, const Point & q)
{
return 3;
}
int main()
{
Point p1;
Point p2;
distance(p1,p2);
return 0;
}
--
Summary: unused code changes the result of name lookup
Product: gcc
Version: 4.2.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: marc dot glisse at normalesup dot org
GCC host triplet: i486-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33518