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