[Bug c++/56328] New: Explicit instantiation of inline function template works for base template, fails for specialized template
michael.schlottke at sloede dot com
gcc-bugzilla@gcc.gnu.org
Thu Feb 14 16:31:00 GMT 2013
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56328
Bug #: 56328
Summary: Explicit instantiation of inline function template
works for base template, fails for specialized
template
Classification: Unclassified
Product: gcc
Version: 4.7.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: michael.schlottke@sloede.com
Why does the compiler treat a specialized template differently from the base
template when it comes to explicit instantiation of inline function templates?
The following code gives a linker error, unless the second "inline" (see AAA)
is removed. In any case, this seems to be a problem of the compiler, not the
linker.
main.cpp
====================================
template <int dim> void f(int src);
int main(int, char** )
{
f<1>(456);
f<2>(789);
}
====================================
template.cpp
====================================
template <int dim> void f(int src);
template <int dim> inline
void f(int src) { (void)0; }
template <> inline /* AAA */
void f<2>(int src) { (void)0; }
template void f<1>(int);
template void f<2>(int);
====================================
Command used:
/pds/opt/gcc-4.7-2/bin/g++ main.cpp template.cpp
Error message:
/tmp/cc42UAxE.o: In function `main':
main.cpp:(.text+0x1f): undefined reference to `void f<2>(int)'
collect2: error: ld returned 1 exit status
g++ -v:
Using built-in specs.
COLLECT_GCC=/pds/opt/gcc-4.7-2/bin/g++
COLLECT_LTO_WRAPPER=/aia/opt/gcc-4.7-2/bin/../libexec/gcc/x86_64-unknown-linux-gnu/4.7.2/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: /pds/opt/install/gcc//gcc-4.7.2/configure
--prefix=/pds/opt/gcc-4.7-2 --enable-threads=posix
Thread model: posix
gcc version 4.7.2 (GCC)
More information about the Gcc-bugs
mailing list