This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/11296] New: gcc 3.2 fails to honor 14.6.4.2, p1, bullet 1
- From: "sebor at roguewave dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 23 Jun 2003 17:59:09 -0000
- Subject: [Bug c++/11296] New: gcc 3.2 fails to honor 14.6.4.2, p1, bullet 1
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11296
Summary: gcc 3.2 fails to honor 14.6.4.2, p1, bullet 1
Product: gcc
Version: 3.2
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: sebor at roguewave dot com
CC: gcc-bugs at gcc dot gnu dot org
The program below is expected to exit with a status of 0. Only symbols from the
definition context are to be considered during unqualified lookup (bullet 1),
and only symbols defined in associated namespaces in both the definition and
instantiation context are to be considered during Koenig lookup (bullet 2). When
compiled with gcc 3.2, the program returns 1 instead, indicating that gcc fails
to correctly implement 14.6.4.2, p1, bullet 1 in that it considers symbols
outside the definition context of N::bar during unqualified lookup. EDG eccp -A
(i.e., strict mode) implements the rules correctly. For a discussion of the
rules see the email thread at c++std-core@research.att.com starting with
c++std-core-10009.
$ cat t.cpp; g++ -static t.cpp && ./a.out ; echo $?
namespace N {
template <class T> T foo (T) { return T (); }
template <class T> T bar (T t) { return foo (t); }
}
struct S { S (int i = 0): i_ (i) { } int i_; };
namespace N {
/* template <> */ S foo (S) { return S (1); }
}
int main ()
{
return 1 == N::bar (S ()).i_;
}
1