c++/5543: gcc 2.95.3 does not resolve intricate template
grzesik@cip.physik.uni-bonn.de
grzesik@cip.physik.uni-bonn.de
Wed Jan 30 11:56:00 GMT 2002
>Number: 5543
>Category: c++
>Synopsis: gcc 2.95.3 does not resolve intricate template
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: unassigned
>State: open
>Class: rejects-legal
>Submitter-Id: net
>Arrival-Date: Wed Jan 30 11:56:00 PST 2002
>Closed-Date:
>Last-Modified:
>Originator: Axel Grzesik
>Release: 2.95.3
>Organization:
>Environment:
Linux Kernel 2.4
>Description:
bizarre.cc: In function `int main()':
bizarre.cc:40: no match for `B<A<type<int> >,type<int> >::C * B<A<type<int> >,type<int> >::C'
>How-To-Repeat:
//I'm repeating the source code that is included in my attachment
template <class S> struct type {
S s;
type ( S ss = 0 ) : s ( ss ) {}
};
template <class S> type<S> operator* ( type<S> s1, type<S> s2 )
{
type< S > t ( s1.s*s2.s );
return t;
}
template <class T> struct A {
T d;
A() : d( 0 ) {}
};
template <class R, class T> struct B {
R* r;
struct C {
B& v;
C ( B& vv ) : v ( vv ) {}
operator T() { return v.r->d; }
};
B() { r = new R(); }
C operator() () { return C(*this); }
};
int main ()
{
B< A<double>, double > b1, b2;
B< A<type<int> >, type<int> > c1, c2;
double b; type<int> c;
b = b1() * b2 (); //works fine
c = c1() * c2 (); //does not compile, unless operator* is specialized (see above)
c = static_cast<type<int> > (c1()) * static_cast<type<int> > (c2()); //works fine
return 0;
}
>Fix:
//this is also included in my attachment
//include this specialization to make error disappear! (Work-around, as you call it ....)
type<int> operator* ( type<int> s1, type<int> s2 )
{
type<int> t ( s1.s*s2.s );
return t;
}
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="bizarre.cc"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="bizarre.cc"
dGVtcGxhdGUgPGNsYXNzIFM+IHN0cnVjdCB0eXBlIHsKICBTIHM7CiAgdHlwZSAoIFMgc3MgPSAw
ICkgOiBzICggc3MgKSB7fQp9OwoKdGVtcGxhdGUgPGNsYXNzIFM+IHR5cGU8Uz4gb3BlcmF0b3Iq
ICggdHlwZTxTPiBzMSwgdHlwZTxTPiBzMiApCnsKICB0eXBlPCBTID4gdCAoIHMxLnMqczIucyAp
OwogIHJldHVybiB0Owp9CgovL2luY2x1ZGUgdGhpcyBzcGVjaWFsaXphdGlvbiB0byBtYWtlIGVy
cm9yIGRpc2FwcGVhciEgKFdvcmstYXJvdW5kLCBhcyB5b3UgY2FsbCBpdCAuLi4uKQovL3R5cGU8
aW50PiBvcGVyYXRvciogKCB0eXBlPGludD4gczEsIHR5cGU8aW50PiBzMiApCi8vewovLyAgdHlw
ZTxpbnQ+IHQgKCBzMS5zKnMyLnMgKTsKLy8gIHJldHVybiB0OwovL30KCnRlbXBsYXRlIDxjbGFz
cyBUPiBzdHJ1Y3QgQSB7IAogIFQgZDsgCiAgQSgpIDogZCggMCApIHt9ICAgICAgICAgIAp9OwoK
dGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQ+IHN0cnVjdCBCIHsKICBSKiByOwogIHN0cnVjdCBD
IHsKICAgIEImIHY7CiAgICBDICggQiYgdnYgKSA6IHYgKCB2diApIHt9IAogICAgb3BlcmF0b3Ig
VCgpIHsgcmV0dXJuIHYuci0+ZDsgfQogIH07CiAgQigpIHsgciA9IG5ldyBSKCk7IH0KICBDIG9w
ZXJhdG9yKCkgKCkgeyByZXR1cm4gQygqdGhpcyk7IH0KfTsKCmludCBtYWluICgpIAp7CiAgQjwg
QTxkb3VibGU+LCBkb3VibGUgPiBiMSwgYjI7CiAgQjwgQTx0eXBlPGludD4gPiwgdHlwZTxpbnQ+
ID4gYzEsIGMyOwogIGRvdWJsZSBiOyB0eXBlPGludD4gYzsKICBiID0gYjEoKSAqIGIyICgpOyAv
L3dvcmtzIGZpbmUKICBjID0gYzEoKSAqIGMyICgpOyAvL2RvZXMgbm90IGNvbXBpbGUsIHVubGVz
cyBvcGVyYXRvciogaXMgc3BlY2lhbGl6ZWQgKHNlZSBhYm92ZSkKICBjID0gc3RhdGljX2Nhc3Q8
dHlwZTxpbnQ+ID4gKGMxKCkpICogc3RhdGljX2Nhc3Q8dHlwZTxpbnQ+ID4gKGMyKCkpOyAvL3dv
cmtzIGZpbmUgCiAgcmV0dXJuIDA7Cn0KCi8qIFRoaXMgaXMgdGhlIGVuc3VpbmcgZXJyb3IgbWVz
c2FnZToKYml6YXJyZS5jYzogSW4gZnVuY3Rpb24gYGludCBtYWluKCknOgpiaXphcnJlLmNjOjQw
OiBubyBtYXRjaCBmb3IgYEI8QTx0eXBlPGludD4gPix0eXBlPGludD4gPjo6QyAqIEI8QTx0eXBl
PGludD4gPix0eXBlPGludD4gPjo6QycKbWFrZTogKioqIFtiaXphcnJlXSBFcnJvciAxCiovCgo=
More information about the Gcc-prs
mailing list