http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58032
Bug ID: 58032
Summary: Bogus error: declared using local type ..., is used
but never defined
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
Google ref: b/9771363
Test:
template <typename T>
struct ResultCallback {
virtual void Run(T) = 0;
};
template <typename T>
struct FunctionResultCallback: public ResultCallback<T> {
void Run(T a) { }
};
template <typename T>
ResultCallback<T>*
NewCallback(void (*function)(T))
{
return new FunctionResultCallback<T>;
}
int main(int argc, char** argv) {
struct Bar {
static void Do(Bar*) { }
};
NewCallback(&Bar::Do)->Run(0);
}
Using
g++ (GCC) 4.9.0 20130730 (experimental)
pp.ii:3:16: error: 'void ResultCallback<T>::Run(T) [with T = main(int,
char**)::Bar*]', declared using local type 'main(int, char**)::Bar', is used
but never defined [-fpermissive]
virtual void Run(T) = 0;
^
Broken since at least 4.7