https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43282
Bug 43282 depends on bug 15272, which changed state.
Bug 15272 Summary: lookup, dependent base
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=15272
What|Removed |Added
-
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43282
Andrew Pinski changed:
What|Removed |Added
Status|UNCONFIRMED |RESOLVED
Resolution|
--- Comment #8 from schaub-johannes at web dot de 2010-06-06 01:01 ---
(In reply to comment #6)
> Dup of bug 15272.
>
I don't know about the internals of GCC, but from a Standard point of view, the
code in that bug shows a different problem than the code in my bug report.
In my bug r
--- Comment #7 from schaub-johannes at web dot de 2010-03-08 23:41 ---
I've digged this up from an early draft ('96:
http://ra.dkuug.dk/JTC1/SC22/WG21/docs/wp/txt/jun96/body.txt), '98 and '03).
Each has different rules. In fact, C++98 would accept comment#3's code.
- '96pre-standard sa
--- Comment #6 from pinskia at gcc dot gnu dot org 2010-03-08 01:06 ---
Dup of bug 15272.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43282
--- Comment #5 from bangerth at gmail dot com 2010-03-08 00:36 ---
OK, so the question is whether the testcase in comment #3 should be rejected
based on the wording of 14.6.2/3.
Jason, as our resident language lawyer, would you mind commenting?
W.
--
bangerth at gmail dot com chan
--- Comment #4 from schaub-johannes at web dot de 2010-03-08 00:26 ---
Yes, this is the consequence. You have to add "this->" or "Bar::" to use
another form of lookup (qualified or class-member access) or use a
using-declaration to bring the name in scope ("using HasFoo::foo;").
I can'
--- Comment #3 from bangerth at gmail dot com 2010-03-08 00:19 ---
But that would mean that the following code should be invalid
because the compiler should never find HasFoo::foo even at
instantiation time:
-
template
struct HasFoo {
void foo(T) { }
};
template
st
--- Comment #2 from schaub-johannes at web dot de 2010-03-08 00:01 ---
The point is that the scope of the base class is not examined even during
instantiation, so you cannot find the class member function and ADL finds
A::foo instead. The Standard says at 14.6.2/3:
In the definition of
--- Comment #1 from bangerth at gmail dot com 2010-03-07 23:41 ---
The error message I get is this:
g/x> c++ -c x.cc
x.cc: In member function 'void Bar::bar() [with T = A::Baz]':
x.cc:18: instantiated from here
x.cc:10: error: no matching function for call to 'Bar::foo(A::Baz)'
x.cc:3
10 matches
Mail list logo