* [Bug c++/58263] [feature request] friend class $UndefinedClass
2013-08-28 14:45 [Bug c++/58263] New: [feature request] friend class $UndefinedClass vova7890 at mail dot ru
@ 2013-08-28 14:51 ` redi at gcc dot gnu.org
2013-08-28 16:32 ` vova7890 at mail dot ru
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: redi at gcc dot gnu.org @ 2013-08-28 14:51 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58263
Jonathan Wakely <redi at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Severity|trivial |enhancement
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to vova7890 from comment #0)
> Maybe need to check, have we declaration or not. If not - got a warning
> about missing declaration.
That can't work, consider:
// A.h
class A {
A();
friend class B;
};
// B.h
#include "A.h"
class B { };
// A.cc
#include "A.h"
A::A() {}
Do we warn in A.cc that B is not defined? It is defined in another header, but
that isn't included by A.cc because it isn't needed.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug c++/58263] [feature request] friend class $UndefinedClass
2013-08-28 14:45 [Bug c++/58263] New: [feature request] friend class $UndefinedClass vova7890 at mail dot ru
2013-08-28 14:51 ` [Bug c++/58263] " redi at gcc dot gnu.org
@ 2013-08-28 16:32 ` vova7890 at mail dot ru
2013-08-28 17:29 ` redi at gcc dot gnu.org
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: vova7890 at mail dot ru @ 2013-08-28 16:32 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58263
--- Comment #2 from vova7890 <vova7890 at mail dot ru> ---
(In reply to Jonathan Wakely from comment #1)
> Do we warn in A.cc that B is not defined? It is defined in another header,
> but that isn't included by A.cc because it isn't needed.
We warn about implicit friend class MyClas2. For example, we wrong writed class
name(as in example MyClas2 -> MyClass2, missed the letter "s" in the word
Class), try to compile that and see:
[vova7890@localhost tmp]$ g++ -O2 main.cpp
main.cpp: In member function 'void MyClass2::need(MyClass1*)':
main.cpp:10:9: error: 'void MyClass1::help()' is private
void help();
^
main.cpp:18:16: error: within this context
cl->help(); // error: is private!!
But, we don`t understand why it`s private, because we think that we correctly
writed class name(friend class MyClass2), and do not see where is the bug
exactly. But, if compiler say as, about implicit friend class MyClas2, like
this:
[vova7890@localhost tmp]$ g++ -O2 main.cpp
main.cpp:8:12: warning: implicit declaration of friend 'MyClas2'
friend class MyClas2;
^
main.cpp: In member function 'void MyClass2::need(MyClass1*)':
main.cpp:10:9: error: 'void MyClass1::help()' is private
void help();
^
main.cpp:18:16: error: within this context
cl->help(); // error: is private!!
we see where is exactly issue, and just correct that stupid typo.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug c++/58263] [feature request] friend class $UndefinedClass
2013-08-28 14:45 [Bug c++/58263] New: [feature request] friend class $UndefinedClass vova7890 at mail dot ru
2013-08-28 14:51 ` [Bug c++/58263] " redi at gcc dot gnu.org
2013-08-28 16:32 ` vova7890 at mail dot ru
@ 2013-08-28 17:29 ` redi at gcc dot gnu.org
2013-08-28 17:42 ` pinskia at gcc dot gnu.org
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: redi at gcc dot gnu.org @ 2013-08-28 17:29 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58263
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> ---
But that will warn about valid code, where you didn't spell the name wrong.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug c++/58263] [feature request] friend class $UndefinedClass
2013-08-28 14:45 [Bug c++/58263] New: [feature request] friend class $UndefinedClass vova7890 at mail dot ru
` (2 preceding siblings ...)
2013-08-28 17:29 ` redi at gcc dot gnu.org
@ 2013-08-28 17:42 ` pinskia at gcc dot gnu.org
2013-08-28 18:01 ` vova7890 at mail dot ru
2013-08-28 18:15 ` vova7890 at mail dot ru
5 siblings, 0 replies; 7+ messages in thread
From: pinskia at gcc dot gnu.org @ 2013-08-28 17:42 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58263
--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
How about looking into the MyClass1 to see if there is a friend class and have
a quick heuristic about the spelling mistake when doing the error message?
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug c++/58263] [feature request] friend class $UndefinedClass
2013-08-28 14:45 [Bug c++/58263] New: [feature request] friend class $UndefinedClass vova7890 at mail dot ru
` (3 preceding siblings ...)
2013-08-28 17:42 ` pinskia at gcc dot gnu.org
@ 2013-08-28 18:01 ` vova7890 at mail dot ru
2013-08-28 18:15 ` vova7890 at mail dot ru
5 siblings, 0 replies; 7+ messages in thread
From: vova7890 at mail dot ru @ 2013-08-28 18:01 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58263
--- Comment #5 from vova7890 <vova7890 at mail dot ru> ---
(In reply to Jonathan Wakely from comment #3)
> But that will warn about valid code, where you didn't spell the name wrong.
Yes, but it can be not in one file, as in example. If it in one file, and
friend class is below the main class, can avoid warning by this:
class MyClass2;
class MyClass1
{
friend class MyClass2; // trivial stupid human issue with MyClas2 ->
MyClass2
private:
void help();
};
class MyClass2
{
public:
void need(MyClass1 *cl) {
cl->help(); // error: is private!!
}
};
Also, maybe can use it on paranoid level warnings, for example.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Bug c++/58263] [feature request] friend class $UndefinedClass
2013-08-28 14:45 [Bug c++/58263] New: [feature request] friend class $UndefinedClass vova7890 at mail dot ru
` (4 preceding siblings ...)
2013-08-28 18:01 ` vova7890 at mail dot ru
@ 2013-08-28 18:15 ` vova7890 at mail dot ru
5 siblings, 0 replies; 7+ messages in thread
From: vova7890 at mail dot ru @ 2013-08-28 18:15 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58263
--- Comment #6 from vova7890 <vova7890 at mail dot ru> ---
(In reply to Andrew Pinski from comment #4)
> How about looking into the MyClass1 to see if there is a friend class and
> have a quick heuristic about the spelling mistake when doing the error
> message?
Good idea. Can lookup for class name in visible fields, and also in curent
source, including fields after friend-contained class.
^ permalink raw reply [flat|nested] 7+ messages in thread