https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109382
Bug ID: 109382
Summary: Error inside virtual function of class template does
not show point of instantiation
Product: gcc
Version: 12.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: zeratul976 at hotmail dot com
Target Milestone: ---
Given the following invalid code:
struct Base {
virtual void f() = 0;
};
template <typename T>
struct C : Base {
void f() override {
T().waldo();
}
};
int main() {
C<int> obj;
}
The error is printed as follows:
$ g++-12 -c test.cpp
test.cpp: In instantiation of ‘void C<T>::f() [with T = int]’:
test.cpp:6:8: required from here
test.cpp:7:9: error: request for member ‘waldo’ in ‘0’, which is of non-class
type ‘int’
7 | T().waldo();
| ~~~~^~~~~
The error is missing a "required from here" line pointing to `C<int> obj;`.
If you imagine everything above main() being library code, it can be hard for a
user to tell which line of the user's code is triggering the error in the
library.