[Bug c++/60167] New: [4.9 regression] Bogus error: conflicting declaration
ppluzhnikov at google dot com
gcc-bugzilla@gcc.gnu.org
Thu Feb 13 05:24:00 GMT 2014
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60167
Bug ID: 60167
Summary: [4.9 regression] Bogus error: conflicting declaration
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: ppluzhnikov at google dot com
The test case below fails to compile with current trunk:
g++ (GCC) 4.9.0 20140213 (experimental)
g++ -c t.cc
t.cc:10:48: error: conflicting declaration ‘typename Foo<F>::Bar Foo<F>::cache’
template <int& F> typename Foo<F>::Bar Foo<F>::cache;
^
t.cc:5:14: note: previous declaration as ‘Foo<F>::Bar Foo<F>::cache’
static Bar cache;
^
t.cc:10:48: error: declaration of ‘Foo<F>::Bar Foo<F>::cache’ outside of class
is not definition [-fpermissive]
template <int& F> typename Foo<F>::Bar Foo<F>::cache;
^
/// --- cut ---
template <int& F>
struct Foo {
typedef int Bar;
static Bar cache;
};
// template <int& F> int Foo<F>::cache; // OK
template <int& F> typename Foo<F>::Bar Foo<F>::cache;
/// --- cut ---
Removing reference (template <int F> struct Foo) also makes it compile.
Compiles fine with gcc-4.8 and Clang.
More information about the Gcc-bugs
mailing list