c++/8042: g++ rejects legal code wrt "expression" templates.

daniel.johnston@intel.com daniel.johnston@intel.com
Wed Sep 25 12:06:00 GMT 2002


>Number:         8042
>Category:       c++
>Synopsis:       g++ rejects legal code wrt "expression" templates.
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          rejects-legal
>Submitter-Id:   net
>Arrival-Date:   Wed Sep 25 11:36:04 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     Dan Johnston
>Release:        gcc 3.2
>Organization:
>Environment:
Linux yzerman.jf.intel.com 2.4.19-gentoo-r9 #2 Wed Sep 18 09:49:20 PDT 2002 i686 GenuineIntel
>Description:
g++ has problems with some advanced template code I'm writing for a high performance vector library.  Both the Intel Linux (icc) compiler and Microsoft VisualStudio.NET compiler accept this without warning. I've attatched the example .cpp file used to generate these errors (no non-std headers required).  Many of the errors generated are due to being unable to find a suitable implementation of some overloaded operators.  However, it then proceeds to list exactly one candidate that exactly matches what is required (and should be used).  Program output is as follows:

% g++ -v -save-temps -g  -ftemplate-depth-99 -o Test main.cpp
Reading specs from /usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/specs
Configured with: /var/tmp/portage/gcc-3.2-r1/work/gcc-3.2/configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --target=i686-pc-linux-gnu --with-system-zlib --enable-languages=c,c++,ada,f77,objc,java --enable-threads=posix --enable-long-long --disable-checking --enable-cstdio=stdio --enable-clocale=generic --enable-__cxa_atexit --enable-version-specific-runtime-libs --with-gxx-include-dir=/usr/include/g++-v32 --with-local-prefix=/usr/local --enable-shared --enable-nls --without-included-gettext
Thread model: posix
gcc version 3.2
 /usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/cpp0 -lang-c++ -D__GNUG__=3 -D__DEPRECATED -D__EXCEPTIONS -v -D__GNUC__=3 -D__GNUC_MINOR__=2 -D__GNUC_PATCHLEVEL__=0 -D__GXX_ABI_VERSION=102 -D__ELF__ -Dunix -D__gnu_linux__ -Dlinux -D__ELF__ -D__unix__ -D__gnu_linux__ -D__linux__ -D__unix -D__linux -Asystem=posix -D__NO_INLINE__ -D__STDC_HOSTED__=1 -D_GNU_SOURCE -Acpu=i386 -Amachine=i386 -Di386 -D__i386 -D__i386__ -D__tune_i686__ -D__tune_pentiumpro__ main.cpp main.ii
GNU CPP version 3.2 (cpplib) (i386 Linux/ELF)
ignoring nonexistent directory "/usr/local/include"
ignoring nonexistent directory "/usr/i686-pc-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/include/g++-v32
 /usr/include/g++-v32/i686-pc-linux-gnu
 /usr/include/g++-v32/backward
 /usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/include
 /usr/include
End of search list.
 /usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/cc1plus -fpreprocessed main.ii -quiet -dumpbase main.cpp -g -version -ftemplate-depth-99 -o main.s
GNU CPP version 3.2 (cpplib) (i386 Linux/ELF)
GNU C++ version 3.2 (i686-pc-linux-gnu)
        compiled by GNU C version 3.2.
main.cpp: In function `int main(int, char**)':
main.cpp:1232: no matching function for call to `VecT<float, 4>::VecT(
   VecT<float, 4>)'
main.cpp:143: candidates are: VecT<T, D>::VecT(T*) [with T = float, int D = 4]
main.cpp:138:                 VecT<T, D>::VecT(T) [with T = float, int D = 4]
main.cpp:134:                 VecT<T, D>::VecT(VecT<T, D>&) [with T = float,
   int D = 4]
main.cpp:1232:   initializing temporary from result of `VecT<T, D>::VecT(T*)
   [with T = float, int D = 4]'
main.cpp:1233: conversion from `Expr<float, 4, BinExprOp<float, float*,
   Scalar<float>, SubOpAdd<float> > >' to non-scalar type `VecT<float, 4>'
   requested
main.cpp:1234: no match for `Expr<float, 4, BinExprOp<float, float*, float*,
   SubOpMultiply<float> > > / float' operator
main.cpp:749: candidates are: Expr<T, D, BinExprOp<T, Expr<T, D, A>, Scalar<T>,
   SubOpDivide<T> > > operator/(Expr<T, D, A>&, T) [with T = float, int D = 4,
   A = BinExprOp<float, float*, float*, SubOpMultiply<float> >]
main.cpp:1236: no match for `+ Expr<float, 4, BinExprOp<float, float*, float*,
   SubOpMultiply<float> > >' operator
main.cpp:1206: candidates are: T operator+(Expr<T, D, A>&) [with T = float, int
   D = 4, A = BinExprOp<float, float*, float*, SubOpMultiply<float> >]
main.cpp: In function `Expr<T, D, BinExprOp<T, T*, Scalar<T>, SubOpAdd<T> > >
   operator+(VecT<T, D>&, T) [with T = float, int D = 4]':
main.cpp:1233:   instantiated from here
main.cpp:532: no matching function for call to `Expr<float, 4, BinExprOp<float,
   float*, Scalar<float>, SubOpAdd<float> > >::Expr(BinExprOp<float, float*,
   Scalar<float>, SubOpAdd<float> >)'
main.cpp:76: candidates are: Expr<float, 4, BinExprOp<float, float*,
   Scalar<float>, SubOpAdd<float> > >::Expr(const Expr<float, 4,
   BinExprOp<float, float*, Scalar<float>, SubOpAdd<float> > >&)
main.cpp:82:                 Expr<T, D, A>::Expr(A&) [with T = float, int D =
   4, A = BinExprOp<float, float*, Scalar<float>, SubOpAdd<float> >]
main.cpp: In function `Expr<T, D, BinExprOp<T, T*, T*, SubOpMultiply<T> > >
   operator*(VecT<T, D>&, VecT<T, D>&) [with T = float, int D = 4]':
main.cpp:1234:   instantiated from here
main.cpp:624: no matching function for call to `Expr<float, 4, BinExprOp<float,
   float*, float*, SubOpMultiply<float> > >::Expr(BinExprOp<float, float*,
   float*, SubOpMultiply<float> >)'
main.cpp:76: candidates are: Expr<float, 4, BinExprOp<float, float*, float*,
   SubOpMultiply<float> > >::Expr(const Expr<float, 4, BinExprOp<float, float*,
   float*, SubOpMultiply<float> > >&)
main.cpp:82:                 Expr<T, D, A>::Expr(A&) [with T = float, int D =
   4, A = BinExprOp<float, float*, float*, SubOpMultiply<float> >]
>How-To-Repeat:
bnzip2 the attached file.  Run 'g++ -o Test main.cpp'
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/x-bzip2; name="main.cpp.bz2"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="main.cpp.bz2"

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



More information about the Gcc-bugs mailing list