[Bug c++/31187] [4.2/4.3 regression] extern declaration of variable in anonymous namespace prevents use of its address as template argument
gdr at cs dot tamu dot edu
gcc-bugzilla@gcc.gnu.org
Fri Mar 16 15:15:00 GMT 2007
------- 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
More information about the Gcc-bugs
mailing list