[Bug c++/45349] New: template function specializations are not recognized when the template is implemented in a header, and optimization is on.
tyler dot packer at landesk dot com
gcc-bugzilla@gcc.gnu.org
Thu Aug 19 21:34:00 GMT 2010
Define a prototype for a template function in a class definition and include
the default implementation in the header.
In a separate cpp file, create a specialization of the template function.
When the function is called that matches the specialization, normally the
specialized function is called, unless the g++ optimizations (-O<n> ) are
turned on. Then the specialization is out of scope, and the default template
implementation is called:
compile the attached code as follows:
g++ special.cpp smain.cpp
then run the result:
./a.out
# Specialized!
# Template function!
Now do the same with optimization:
g++ -O3 special.cpp smain.cpp
and run again:
./a.out
# Specialized!
# Template function!
With optimization on, the specialization is not called.
NOTE: This does NOT occur if the class declaration is in the source modue
(.cpp), only when it's included from an external header (.h).
--
Summary: template function specializations are not recognized
when the template is implemented in a header, and
optimization is on.
Product: gcc
Version: 4.4.4
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: tyler dot packer at landesk dot com
GCC host triplet: x86_64-unknown-linux-gnu
GCC target triplet: x86_64-unknown-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45349
More information about the Gcc-bugs
mailing list