Very recently we started to reject
class Compressible;
template <class T, class EngineTag> class Engine;
template <class T>
class Engine<T, Compressible>
{
public:
typedef T Element_t;
Element_t read(int);
};
template <class T>
T Engine<T, Compressible>::read(int)
{
}
Engine<int, Compressible> x;
with
t2.ii:12:3: error: prototype for 'T Engine<T, Compressible>::read(int)' does
not match any in class 'Engine<T, Compressible>'
t2.ii:8:13: error: candidate is: Element_t Engine<T, Compressible>::read(int)
(testcase reduced from tramp3d).
But the following is accepted:
template <class T>
class Engine
{
public:
typedef T Element_t;
Element_t read(int);
};
template <class T>
T Engine<T>::read(int)
{
}
Engine<int> x;
--
Summary: [4.5 Regression] Rejects specialization
Product: gcc
Version: 4.5.0
Status: UNCONFIRMED
Keywords: rejects-valid
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: rguenth at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43558