gcc version 4.0.2 20050808 (prerelease) (Ubuntu 4.0.1-4ubuntu9)
gcc version 4.0.3 (Ubuntu 4.0.3-1ubuntu3)
Different partial template specialization result with different optimization
options?
1. right result without optimization
$g++ -O0 -g3 -c test.cpp
$g++ -O0 -g3 -c a.cpp
$g++ -O0 -g3 -o test test.o a.o
$./test
DEFAULT
PARTIAL
2. wrong result with optimization
$g++ -O2 -g0 -c test.cpp
$g++ -O2 -g0 -c a.cpp
$g++ -O2 -g0 -o test test.o a.o
$./test
DEFAULT
DEFAULT
Bug???
3.if write three part in one file ,we get the right result
$g++ -O2 -g0 -o test2 test2
$./test2
DEFAULT
PARTIAL
$g++ -O0 -g3 -o test2 test2
$./test2
DEFAULT
PARTIAL
//
//a.h
//
#ifndef A_H
#define A_H
#include
using namespace std;
template
class A
{
public:
void echo() {cout << "ĬÈÏ" << endl;}
}
;
#endif
//
//a.cpp
//
#include "a.h"
template <>
void
A<0>::echo()
{
cout << "ÌØ»¯" << endl;
}
//
//test.cpp
//
#include "a.h"
int main( int argc, char *argv[] )
{
A<1> DEFAULT;
A<0> PARTICULAR;
DEFAULT.echo();
PARTICULAR.echo();
return EXIT_SUCCESS;
}
//
//test2.cpp
//
#include
using namespace std;
template
class A
{
public:
void echo() {cout << "ĬÈÏ" << endl;}
}
;
template <>
void
A<0>::echo()
{
cout << "ÌØ»¯" << endl;
}
int main( int argc, char *argv[] )
{
A<1> DEFAULT;
A<0> PARTICULAR;
DEFAULT.echo();
PARTICULAR.echo();
return EXIT_SUCCESS;
}
--
Summary: Different partial template specialization result with
different optimization options?
Product: gcc
Version: 4.0.3
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: meter dot ten at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27070