[Bug c++/11684] New: Template specialisation
nickn at newsonnet dot fsnet dot co dot uk
gcc-bugzilla@gcc.gnu.org
Sun Jul 27 15:07:00 GMT 2003
PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11684
Summary: Template specialisation
Product: gcc
Version: 3.3
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: nickn at newsonnet dot fsnet dot co dot uk
CC: gcc-bugs at gcc dot gnu dot org
The following example seems to instance the templated function incorrectly:
class test
{
public:
float operator[]( int index )
{
return testFloat[index];
}
private:
float testFloat[3];
};
template < class typeA > float
operator*(
typeA a,
float b
)
{
return a[0] * b;
}
template < class typeB > float
operator*(
float a,
typeB b
)
{
return a * b[0];
}
template < class typeA, class typeB > float
operator*(
typeA a,
typeB b
)
{
return a[0] * b[0];
}
int main( void )
{
test aTest;
float bTest;
float result;
result = aTest * bTest;
result = bTest * aTest;
return 0;
}
with the errors:
test.cpp:31: `float operator*(float, typeB) [with typeB = float]' must have
an argument of class or enumerated type
test.cpp:22: `float operator*(typeA, float) [with typeA = float]' must have
an argument of class or enumerated type
Surely if the operation is float * class the the more specialised template
is the float, typeB version, not the typeA, float version?
More information about the Gcc-bugs
mailing list