public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/23263] New: Fails to identify member definition
@ 2005-08-06 20:23 igodard at pacbell dot net
2005-08-06 20:29 ` [Bug c++/23263] " bangerth at dealii dot org
` (4 more replies)
0 siblings, 5 replies; 7+ messages in thread
From: igodard at pacbell dot net @ 2005-08-06 20:23 UTC (permalink / raw)
To: gcc-bugs
template<typename T> struct foo{ static T* p; };
template<typename T> T* foo<T>::p = 0;
template<typename T> struct A {};
template<typename T, template<typename> class C>
struct bar{ static C<void>* p; };
template<typename T> A<void>* bar<T,A>::p = 0;
int main() {
foo<int> f;
bar<int, A> b;
return 0;
}
gets you:
~/ootbc/members/src$ g++ foo.cc
foo.cc:7: error: invalid use of undefined type `struct bar<T, A>'
foo.cc:6: error: declaration of `struct bar<T, A>'
As it works for the plain type case (foo), it looks like something's wrong in
the binding of template template parameters (bar).
Ivan
--
Summary: Fails to identify member definition
Product: gcc
Version: 3.4.0
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: igodard at pacbell dot net
CC: gcc-bugs at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23263
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug c++/23263] Fails to identify member definition
2005-08-06 20:23 [Bug c++/23263] New: Fails to identify member definition igodard at pacbell dot net
@ 2005-08-06 20:29 ` bangerth at dealii dot org
2005-08-06 20:40 ` igodard at pacbell dot net
` (3 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: bangerth at dealii dot org @ 2005-08-06 20:29 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From bangerth at dealii dot org 2005-08-06 20:29 -------
No, you try to partially specialize a member. That isn't allowed.
You either have to completely specialize all template parameters, or
none. Long standing annoyance in C++...
W.
--
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |RESOLVED
Resolution| |INVALID
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23263
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug c++/23263] Fails to identify member definition
2005-08-06 20:23 [Bug c++/23263] New: Fails to identify member definition igodard at pacbell dot net
2005-08-06 20:29 ` [Bug c++/23263] " bangerth at dealii dot org
@ 2005-08-06 20:40 ` igodard at pacbell dot net
2005-08-06 22:38 ` pinskia at gcc dot gnu dot org
` (2 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: igodard at pacbell dot net @ 2005-08-06 20:40 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From igodard at pacbell dot net 2005-08-06 20:40 -------
Reopened as a complaint about the diagnostic. The naive (or even reasonably
sophisticated) user cannot figure out "illegal partial specialization" from that
message.
Comeau gives:
"ComeauTest.c", line 7: error: template argument list must match the parameter list
template<typename T> A<void>* bar<T,A>::p = 0;
^
which I admit is only a little better.
--
What |Removed |Added
----------------------------------------------------------------------------
Status|RESOLVED |UNCONFIRMED
Resolution|INVALID |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23263
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug c++/23263] Fails to identify member definition
2005-08-06 20:23 [Bug c++/23263] New: Fails to identify member definition igodard at pacbell dot net
2005-08-06 20:29 ` [Bug c++/23263] " bangerth at dealii dot org
2005-08-06 20:40 ` igodard at pacbell dot net
@ 2005-08-06 22:38 ` pinskia at gcc dot gnu dot org
2005-08-06 22:56 ` [Bug c++/23263] Incomprehensible message for invalid attempt to partially specialize a member bangerth at dealii dot org
2005-08-08 2:42 ` igodard at pacbell dot net
4 siblings, 0 replies; 7+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-08-06 22:38 UTC (permalink / raw)
To: gcc-bugs
--
What |Removed |Added
----------------------------------------------------------------------------
Severity|normal |enhancement
Keywords| |diagnostic
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23263
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug c++/23263] Incomprehensible message for invalid attempt to partially specialize a member
2005-08-06 20:23 [Bug c++/23263] New: Fails to identify member definition igodard at pacbell dot net
` (2 preceding siblings ...)
2005-08-06 22:38 ` pinskia at gcc dot gnu dot org
@ 2005-08-06 22:56 ` bangerth at dealii dot org
2005-08-08 2:42 ` igodard at pacbell dot net
4 siblings, 0 replies; 7+ messages in thread
From: bangerth at dealii dot org @ 2005-08-06 22:56 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From bangerth at dealii dot org 2005-08-06 22:56 -------
If you know what's going on, the error message is actually clear:
foo.cc:7: error: invalid use of undefined type `struct bar<T, A>'
This just means that the partially specialized class bar<T,A> has not
yet been declared, and that you can't therefore define a member of it.
But I grant that we could do better. For that purpose, this example
may be better:
---------------------
template <int A, int B> struct X { void f(); };
template <int A> void X<A,1>::f() {}
---------------------
We presently get this:
g/x> /home/bangerth/bin/gcc-4.1-pre/bin/c++ -c x.cc
x.cc:2: error: invalid use of undefined type ‘struct X<A, 1>’
x.cc:1: error: declaration of ‘struct X<A, 1>’
x.cc:2: error: template definition of non-template ‘void X<A, 1>::f()’
W.
--
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Ever Confirmed| |1
Last reconfirmed|0000-00-00 00:00:00 |2005-08-06 22:56:41
date| |
Summary|Fails to identify member |Incomprehensible message for
|definition |invalid attempt to partially
| |specialize a member
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23263
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug c++/23263] Incomprehensible message for invalid attempt to partially specialize a member
2005-08-06 20:23 [Bug c++/23263] New: Fails to identify member definition igodard at pacbell dot net
` (3 preceding siblings ...)
2005-08-06 22:56 ` [Bug c++/23263] Incomprehensible message for invalid attempt to partially specialize a member bangerth at dealii dot org
@ 2005-08-08 2:42 ` igodard at pacbell dot net
4 siblings, 0 replies; 7+ messages in thread
From: igodard at pacbell dot net @ 2005-08-08 2:42 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From igodard at pacbell dot net 2005-08-08 02:42 -------
See also #23281
Should this and other reports about diagnostic quality be treated as
"enhancement requests"? I suppose tht it depends on what you consider
"correctness". If that means "conforming to standard", then any diagnostic will
do, including "something wrong found somewhere in program". Personally I use a
different standard of "correct", which includes "usable", and so addresses
issues like compilation time measured in days as well as quality of diagnostic.
I understand that the gcc implementation community has a notion of "QOI"
(quality of implementation) which reflects much of what I call "usable". But I
would distinguish a "defect of QOI" from an "enhancement request"; the latter
being something nice to have, but the former impacting real usage.
I put this particular DR in the "defect of QOI" category. Even if you do not,
you probably can select a non-empty set of DRs that are truly "defects" and not
mere "enhancement requests.
Consequently I'm filing this as a DR against the gcc DR reporting machinery
itself, rather than against the compiler in particular. There needs to be
categories for QOI defects of varying severity; either that, or complaints about
diagnostics and other QOI ussues should not by policy be filed as "enhancement
requests", and forgotten.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23263
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug c++/23263] Incomprehensible message for invalid attempt to partially specialize a member
[not found] <bug-23263-6594@http.gcc.gnu.org/bugzilla/>
@ 2007-03-12 17:39 ` manu at gcc dot gnu dot org
0 siblings, 0 replies; 7+ messages in thread
From: manu at gcc dot gnu dot org @ 2007-03-12 17:39 UTC (permalink / raw)
To: gcc-bugs
------- Comment #5 from manu at gcc dot gnu dot org 2007-03-12 17:39 -------
(In reply to comment #4)
> See also PR 23281
[snip]
> Consequently I'm filing this as a DR against the gcc DR reporting machinery
> itself, rather than against the compiler in particular. There needs to be
> categories for QOI defects of varying severity; either that, or complaints about
> diagnostics and other QOI ussues should not by policy be filed as "enhancement
> requests", and forgotten.
It doesn't matter whether this is filled this way or that way. The problem is
that there are more tan 2 thousand bugs opened. Logically, most developers tend
to focus on fixing regressions, ICEs or optimisations rather on precise wording
of correct diagnostics.
We need more contributors in this area, you are welcome to participate!
--
manu at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |manu at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23263
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2007-03-12 17:39 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-08-06 20:23 [Bug c++/23263] New: Fails to identify member definition igodard at pacbell dot net
2005-08-06 20:29 ` [Bug c++/23263] " bangerth at dealii dot org
2005-08-06 20:40 ` igodard at pacbell dot net
2005-08-06 22:38 ` pinskia at gcc dot gnu dot org
2005-08-06 22:56 ` [Bug c++/23263] Incomprehensible message for invalid attempt to partially specialize a member bangerth at dealii dot org
2005-08-08 2:42 ` igodard at pacbell dot net
[not found] <bug-23263-6594@http.gcc.gnu.org/bugzilla/>
2007-03-12 17:39 ` manu at gcc dot gnu dot org
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).