Not sure if this is a bug (probably not even), but reporting it
here anyway on request of pinskia after I asked him about it online.
I used to be able to compile the following with 3.3.3:
poly left = (x2 + b) * x + a;
where all variables involved are of type 'poly'.
With 3.4.2 I get this error:
../../../libecc/testsuite/point/pointTest.cc:190: error: no match for
'operator*' in 'libecc::operator+ [with unsigned int m = 5u, unsigned int k =
2u](((const libecc::polynomial<5u, 2u>&)((const libecc::polynomial<5u,
2u>*)(+x2))), ((const libecc::polynomial<5u, 2u>&)((const libecc::polynomial<5u,
2u>*)(&b)))) * x'
And, in order for it compile I have to use split up the
expression like this:
poly const& tmp1 = (x2 + b);
poly left = tmp1 * x + a;
I've attached the full preprocessed source with stripped line numbers.
The results with that file are as follows:
$ /usr/local/gcc-3.3.3/lib/gcc-lib/i686-redhat-linux/3.3.3/cc1plus
-fpreprocessed pointTest.ii -quiet -dumpbase pointTest.cc -auxbase-strip
pointTest.o -g -version -o pointTest.s
GNU C++ version 3.3.3 (i686-redhat-linux)
compiled by GNU C version 3.3.3.
GGC heuristics: --param ggc-min-expand=90 --param ggc-min-heapsize=113264
(no errors), and:
$ /usr/local/gcc-3.4.2/libexec/gcc/i686-redhat-linux/3.4.2/cc1plus
-fpreprocessed pointTest.ii -quiet -dumpbase pointTest.cc -auxbase-strip
pointTest.o -g -version -o pointTest.s
GNU C++ version 3.4.2 (i686-redhat-linux)
compiled by GNU C version 3.4.2.
GGC heuristics: --param ggc-min-expand=90 --param ggc-min-heapsize=113264
pointTest.ii: In function `int main()':
pointTest.ii:41496: error: no match for 'operator*' in 'libecc::operator+ [with
unsigned int m = 5u, unsigned int k = 2u](((const libecc::polynomial<5u,
2u>&)((const libecc::polynomial<5u, 2u>*)(+x2))), ((const libecc::polynomial<5u,
2u>&)((const libecc::polynomial<5u, 2u>*)(&b)))) * x'
pointTest.ii:41502: error: no match for 'operator==' in 'left ==
libecc::operator+ [with unsigned int m = 5u, unsigned int k = 2u](((const
libecc::polynomial<5u, 2u>&)((const libecc::polynomial<5u, 2u>*)(+y2))), ((const
libecc::polynomial<5u, 2u>&)((const libecc::polynomial<5u,
2u>*)(&libecc::operator*(const libecc::polynomial<m, k>&, const
libecc::polynomial<m, k>&) [with unsigned int m = 5u, unsigned int k =
2u](((const libecc::polynomial<5u, 2u>&)((const libecc::polynomial<5u,
2u>*)(&y))))))))'
pointTest.ii:29745: note: candidates are: bool libecc::operator==(const
libecc::bitset_index&, const libecc::bitset_index&)
Attaching pointTest.ii.bz2 in a minute.
--
Summary: Possible regression with error no match for 'operator*'
Product: gcc
Version: 3.4.2
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: carlo at gcc dot gnu dot org
CC: gcc-bugs at gcc dot gnu dot org
GCC host triplet: i686-redhat-linux
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18110