This bug report may be related to bug 20584, but I've got standalone compilable code that not only produces a warning, but also fails to link.
File t.h: #pragma interface template<class T> struct C { explicit C(const T& t) : a(t) { } virtual ~C() { } T a; }; File f.cc: #include "t.h" struct A { A() { } virtual ~A() { } }; int main() { A a; C<A> c(a); } > g++ -g -Wall f.cc t.h:7: warning: inline function 'A::A(const A&)' used but never defined /tmp/ccM01LV4.o(.gnu.linkonce.t._ZN1CI1AEC1ERKS0_+0x21): In function `C<A>::C(A const&)': /home/jmaurer/IS/isgbe/servers/kfi/f.cc:12: undefined reference to `A::A(A const&)' It used to work with gcc 3.4.3. At the very least, the warning message should have an instantiation backtrace so that the user knows that the "used" comes from the instantiation of C<A>. -- Summary: #pragma interface, templates, and "inline function used but never defined" Product: gcc Version: 4.0.0 Status: UNCONFIRMED Severity: normal Priority: P2 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: jens dot maurer at gmx dot net CC: Jens dot Maurer at is-teledata dot com,gcc-bugs at gcc dot gnu dot org GCC build triplet: i686-pc-linux-gnu GCC host triplet: i686-pc-linux-gnu GCC target triplet: i686-pc-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21280