public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: c++/3671: g++ incorrectly tries to instantiate multiple member template specializations
@ 2002-11-21 21:06 Wolfgang Bangerth
  0 siblings, 0 replies; 3+ messages in thread
From: Wolfgang Bangerth @ 2002-11-21 21:06 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c++/3671; it has been noted by GNATS.

From: Wolfgang Bangerth <bangerth@ticam.utexas.edu>
To: gcc-gnats@gcc.gnu.org, <gcc-bugs@gcc.gnu.org>
Cc:  
Subject: Re: c++/3671: g++ incorrectly tries to instantiate multiple member
 template specializations
Date: Fri, 15 Nov 2002 20:25:42 -0600 (CST)

 Good question what happens here:
 ----------------------------------
 enum T1 {a};
 enum T2 {b};
 
 struct Y {
   template <T1 i> void foo();
   template <T2 i> void foo();
 };
 
 template void Y::foo<a> ();
 
 // int main() {
 //   Y c;
 //   c.foo<a>();
 // }
 ---------------------------------
 I get
 tmp/g> /home/bangerth/bin/gcc-3.3x-pre/bin/c++ x.cc
 x.cc:9: error: cannot convert `T1' to `T2' in initialization
 x.cc:9: error: non-constant `<expression error>' cannot be used as template
    argument
 x.cc: In instantiation of `void Y::foo() [with T1 i = a]':
 x.cc:9:   instantiated from here
 x.cc:9: error: explicit instantiation of `void Y::foo() [with T1 i = a]' 
 but no
    definition available
 
 
 If I use the commented main function instead of the explicit 
 instantiation, I get
 tmp/g> /home/bangerth/bin/gcc-3.3x-pre/bin/c++ x.cc
 x.cc: In function `int main()':
 x.cc:13: error: cannot convert `T1' to `T2' in initialization
 x.cc:13: error: non-constant `<expression error>' cannot be used as template
    argument
 
 which I find even less helpful.
 
 Regards
   Wolfgang
 
 -------------------------------------------------------------------------
 Wolfgang Bangerth              email:           bangerth@ticam.utexas.edu
                                www: http://www.ticam.utexas.edu/~bangerth
 
 


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: c++/3671: g++ incorrectly tries to instantiate multiple member template specializations
@ 2002-06-07  7:47 lerdsuwa
  0 siblings, 0 replies; 3+ messages in thread
From: lerdsuwa @ 2002-06-07  7:47 UTC (permalink / raw)
  To: gcc-bugs, gcc-prs, nobody, weissr

Synopsis: g++ incorrectly tries to instantiate multiple member template specializations

State-Changed-From-To: open->analyzed
State-Changed-By: lerdsuwa
State-Changed-When: Fri Jun  7 07:47:49 2002
State-Changed-Why:
    Confirmed.

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=3671


^ permalink raw reply	[flat|nested] 3+ messages in thread

* c++/3671: g++ incorrectly tries to instantiate multiple member template specializations
@ 2001-07-13  3:26 weissr
  0 siblings, 0 replies; 3+ messages in thread
From: weissr @ 2001-07-13  3:26 UTC (permalink / raw)
  To: gcc-gnats

>Number:         3671
>Category:       c++
>Synopsis:       g++ incorrectly tries to instantiate multiple member template specializations
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          rejects-legal
>Submitter-Id:   net
>Arrival-Date:   Fri Jul 13 03:26:00 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     Roland Weiss
>Release:        gcc version 3.0
>Organization:
>Environment:
i686-pc-linux-gnu, Linux Mandrake 8.0
>Description:
g++ emits the following error message when compiling my test program:

Dependent_Types_Specialization.cpp: In function `int main()':
Dependent_Types_Specialization.cpp:79: cannot convert `Index2' to `Index1' in
   initialization
Dependent_Types_Specialization.cpp:79: non-constant `<expression error>' cannot
   be used as template argument

The problems seems to be that g++ incorrectly tries to instantiate both versions of the get_index member template in the class template Compound_Type. Therefore the index_type given at the instantiation place in the main program will not match one version and trigger the error message.

The program compiles without problems using the EGD frontend 2.44.
>How-To-Repeat:
run g++ on the file Dependent_Types_Specialization.cpp, no special flags are needed
>Fix:
don't know one!
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: text/x-c++src; name="Dependent_Types_Specialization.cpp"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="Dependent_Types_Specialization.cpp"

Ly8gVGhpcyB0ZXN0IHByb3BncmFtIGlzIHVzZWQgdG8gZXZhbHVhdGUgdGhlIGNvbXBpbGVyIHRl
bXBsYXRlIGluc3RhbnRpYXRpb24KLy8gbWVjaGFuaXNtIGZvciBtZW1iZXIgdGVtcGxhdGVzIHNw
ZWNpYWxpemVkIG9uIGRlcGVuZGVudCB0eXBlcy4KCi8vI2luY2x1ZGUgPGlvc3RyZWFtPgoKLy8g
VGhpcyBpcyBzb21lIHNpbXBsZSBiYXNlIHR5cGUgdGhhdCB0YWtlcyB0d28gdGVtcGxhdGUgcGFy
YW1ldGVycy4KLy8gIEluZGV4VCBpcyBhbiBpbmRleCB0eXBlLCB1c3VhbGx5IGFuIGVudW1lcmF0
aW9uLgovLyAgQ29udGVudFQgc3RvcmVzIHNvbWUgaW5mb3JtYXRpb24sIGRlcGVuZGluZyBpbiB0
aGUgaW5kZXggdHlwZS4KLy8gVGhlIGludGVudCBpcyB0byBhY2Nlc3MgdGhlIGNvbnRlbnQgd2l0
aCBpbmRleGVzIG9mIHRoZSBpbmRleCB0eXBlLCBidXQgZm9yCi8vIHRlc3RpbmcgcHVycG9zZXMg
dGhlIGdldF9pbmRleCBmdW5jdGlvbiBqdXN0IHJldHVybnMgdGhlIGluZGV4Lgp0ZW1wbGF0ZSA8
dHlwZW5hbWUgSW5kZXhULCBjbGFzcyBDb250ZW50VD4Kc3RydWN0IEJhc2VfVHlwZQp7CiAgdHlw
ZWRlZiBJbmRleFQgaW5kZXhfdHlwZTsKICB0eXBlZGVmIENvbnRlbnRUIGNvbnRlbnRfdHlwZTsK
CiAgdGVtcGxhdGUgPEluZGV4VCBpPgogIEluZGV4VCBnZXRfaW5kZXgoKQogIHsKICAgIHJldHVy
biBpOwogIH0KcHJpdmF0ZToKICBDb250ZW50VCBtX2NvbnRlbnQ7Cn07CgovLyBUaGlzIGlzIGEg
Y29tcG91bmQgdHlwZSB0aGF0IGFnZ3JlZ2F0ZXMgdHdvIGJhc2UgdHlwZXMuIFRoZSBiYXNlIHR5
cGUKLy8gaW5zdGFudGlhdGlvbnMgYXJlIGdpdmVuIGFzIHRlbXBsYXRlIHBhcmFtZXRlcnMuCi8v
IEZvciB0aGUgdHdvIGluZGV4IHR5cGVzIG9mIHRoZSB0ZW1wbGF0ZSBwYXJhbWV0ZXJzIHNwZWNp
YWxpemVkIGZ1bmN0aW9ucwovLyBjYWxsZWQgZ2V0X2luZGV4IGFyZSBnaXZlbiBhbmQgdGhlIGFw
cHJvcHJpYXRlIHNob3VsZCBiZSBzZWxlY3RlZCBhdAovLyBpbnN0YW50aWF0aW9uIHRpbWUuCnRl
bXBsYXRlIDxjbGFzcyBCMSwgY2xhc3MgQjI+CnN0cnVjdCBDb21wb3VuZF9UeXBlCnsKICB0eXBl
ZGVmIHR5cGVuYW1lIEIxOjppbmRleF90eXBlIEkxOwogIHR5cGVkZWYgdHlwZW5hbWUgQjE6OmNv
bnRlbnRfdHlwZSBDMTsKICB0eXBlZGVmIHR5cGVuYW1lIEIyOjppbmRleF90eXBlIEkyOwogIHR5
cGVkZWYgdHlwZW5hbWUgQjI6OmNvbnRlbnRfdHlwZSBDMjsKCiAgdGVtcGxhdGUgPEkxIGk+CiAg
STEgZ2V0X2luZGV4KCkKICB7CiAgICByZXR1cm4gaTsKICB9CgogIHRlbXBsYXRlIDxJMiBpPgog
IEkyIGdldF9pbmRleCgpCiAgewogICAgcmV0dXJuIGk7CiAgfQoKcHJpdmF0ZToKICBCMSBiYXNl
MTsKICBCMiBiYXNlMjsKfTsKCi8vIGluZGV4IHR5cGUgMQplbnVtIEluZGV4MSB7CiAgaTFfMSA9
IDEsIGkxXzIKfTsKCi8vIGluZGV4IHR5cGUgMgplbnVtIEluZGV4MiB7CiAgaTJfMSA9IDMsIGky
XzIKfTsKCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KaW50IG1haW4oKQp7CiAgQmFzZV9UeXBlPEluZGV4MSwgaW50PiBi
MTsKICBCYXNlX1R5cGU8SW5kZXgyLCBpbnQ+IGIyOwogIGludCBpID0gYjEuZ2V0X2luZGV4PGkx
XzE+KCk7IC8vIDEKICBpID0gYjIuZ2V0X2luZGV4PGkyXzE+KCk7IC8vIDMKICAvL3N0ZDo6Y291
dCA8PCBiMS5nZXRfaW5kZXg8aTFfMT4oKSA8PCAiXG4iOwogIC8vc3RkOjpjb3V0IDw8IGIyLmdl
dF9pbmRleDxpMl8xPigpIDw8ICJcbiI7CgogIENvbXBvdW5kX1R5cGU8IEJhc2VfVHlwZTxJbmRl
eDEsIGludD4sIEJhc2VfVHlwZTxJbmRleDIsIGludD4gPiBjOwoKICAvLyAhISEhISEhISEhISEh
ISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEh
ISEhISEKICAvLwogIC8vIEdDQyAyLjk1LjIgYW5kIEdDQyAzLjAgYm90aCB0cnkgdG8gaW5zdGFu
dGlhdGUgYm90aCEgdmVyc2lvbnMgb2YgZ2V0X2luZGV4CiAgLy8gYW5kIHRoZXJlZm9yZSBmYWls
IHRvIGNvbXBpbGUgdGhpcyBsaW5lLi4uCiAgLy8KICAvLyEhISEhISEhISEhISEhISEhISEhISEh
ISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKICBp
ID0gYy5nZXRfaW5kZXg8aTJfMj4oKTsgLy8gNAogIC8vc3RkOjpjb3V0IDw8IGMuZ2V0X2luZGV4
PGkyXzI+KCkgPDwgIlxuIjsKCiAgLy9yZXR1cm4gRVhJVF9TVUNDRVNTOwp9Cg==


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2002-11-16  2:26 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-11-21 21:06 c++/3671: g++ incorrectly tries to instantiate multiple member template specializations Wolfgang Bangerth
  -- strict thread matches above, loose matches on Subject: below --
2002-06-07  7:47 lerdsuwa
2001-07-13  3:26 weissr

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).