The following code compiles on gcc-4.2/4.3/4.4 but doesn't on gcc-4.5, with
error: aggregate foo<identity<int>, 0> bar has incomplete type and cannot be
defined
template <class T>
struct identity
{
typedef T type;
};
template <class T, typename T::type A>
struct foo {};
template <class T, T A>
struct foo<identity<T>, A> {};
int main()
{
foo<identity<int>,0> bar; // error here
}
g++ somehow is messed up because foo is defined, and it should pick the partial
specialization. If we comment the latter, it compiles, picking the main foo
definition.
--
Summary: [4.5 Regression] class partial specialization error
Product: gcc
Version: 4.5.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: rodolfo at rodsoft dot org
GCC build triplet: x86_64-pc-linux-gnu
GCC host triplet: x86_64-pc-linux-gnu
GCC target triplet: x86_64-pc-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44753