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