It gives an unexpected result while doing xor operation on a templated class.
For sample, here is my simple code:
------------------------------------------------------
#include <iostream>
using namespace std;
template
<class T>
inline void XOR-Swap(T &a, T &b)
{
if (a != b)
a ^= b ^= a ^= b;
};
int main()
{
int a = 10;
int b = -3;
XOR-Swap(a, b);
cout << a << endl;
cout << b << endl;
return 0;
}
-----------------------------------------------------
Results:
1. with "-O0": Incorrect
-------------------
0
10
-------------------
2. with "-O1": Correct
-------------------
-3
10
-------------------
Any comment?
--
Summary: template<class T> XOR-Swap(T &a, T &b); error with -O0
option
Product: gcc
Version: 4.1.2
Status: UNCONFIRMED
Severity: critical
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: nanericwang at hotmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32067