This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/31187] [4.2/4.3 regression] extern declaration of variable in anonymous namespace prevents use of its address as template argument
- From: "gdr at cs dot tamu dot edu" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 16 Mar 2007 15:15:30 -0000
- Subject: [Bug c++/31187] [4.2/4.3 regression] extern declaration of variable in anonymous namespace prevents use of its address as template argument
- References: <bug-31187-1827@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #2 from gdr at cs dot tamu dot edu 2007-03-16 15:15 -------
Subject: Re: New: [4.2 regression] extern declaration of variable in
anonymous namespace prevents use of its address as template argument
"zak at transversal dot com" <gcc-bugzilla@gcc.gnu.org> writes:
| The following code, which compiles fine on gcc 4.1.2 and I believe is valid,
| fails on an up-to-date checkout from the 4.2 branch:
|
| --------------------------------------
| class foo { };
|
| namespace
| {
| extern foo foo1;
| foo foo1;
| }
|
| template< foo * >
| class bar { };
|
| bar< &foo1 > bar1;
| ---------------------------------------
|
| giving the error:
|
| test.cc:12: error: '&<unnamed>::foo1' is not a valid template argument of
type
| 'foo*' because '<unnamed>::foo1' does not have external linkage
| test.cc:12: error: invalid type in declaration before ';' token
|
|
| ... which I would only expect if "foo1" were declared "static".
Yes, this is a bug in the compiler. I suspect it was introduced when
the the back was told to treat declarations at unnamed namespaces
ast static. That of course is an optimization and should be appear at
the front-end.
-- gaby
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31187