public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/34810] accepts invalid dependent(?) type in template class method
       [not found] <bug-34810-4@http.gcc.gnu.org/bugzilla/>
@ 2021-08-11 21:51 ` pinskia at gcc dot gnu.org
  2021-12-07  1:48 ` pinskia at gcc dot gnu.org
                   ` (9 subsequent siblings)
  10 siblings, 0 replies; 11+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-08-11 21:51 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=34810

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|2008-01-16 13:26:36         |2021-8-11

--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
clang does a pedwarning:
<source>:7:22: error: ISO C++ specifies that qualified reference to 'Foo' is a
constructor name rather than a type in this context, despite preceding
'typename' keyword [-Werror,-Winjected-class-name]
    typename Foo<T>::Foo ();
                     ^

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

* [Bug c++/34810] accepts invalid dependent(?) type in template class method
       [not found] <bug-34810-4@http.gcc.gnu.org/bugzilla/>
  2021-08-11 21:51 ` [Bug c++/34810] accepts invalid dependent(?) type in template class method pinskia at gcc dot gnu.org
@ 2021-12-07  1:48 ` pinskia at gcc dot gnu.org
  2021-12-07  1:49 ` pinskia at gcc dot gnu.org
                   ` (8 subsequent siblings)
  10 siblings, 0 replies; 11+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-12-07  1:48 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=34810

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |johelegp at gmail dot com

--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
*** Bug 103564 has been marked as a duplicate of this bug. ***

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

* [Bug c++/34810] accepts invalid dependent(?) type in template class method
       [not found] <bug-34810-4@http.gcc.gnu.org/bugzilla/>
  2021-08-11 21:51 ` [Bug c++/34810] accepts invalid dependent(?) type in template class method pinskia at gcc dot gnu.org
  2021-12-07  1:48 ` pinskia at gcc dot gnu.org
@ 2021-12-07  1:49 ` pinskia at gcc dot gnu.org
  2021-12-07  1:51 ` pinskia at gcc dot gnu.org
                   ` (7 subsequent siblings)
  10 siblings, 0 replies; 11+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-12-07  1:49 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=34810

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |ahuszagh at gmail dot com

--- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
*** Bug 82347 has been marked as a duplicate of this bug. ***

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

* [Bug c++/34810] accepts invalid dependent(?) type in template class method
       [not found] <bug-34810-4@http.gcc.gnu.org/bugzilla/>
                   ` (2 preceding siblings ...)
  2021-12-07  1:49 ` pinskia at gcc dot gnu.org
@ 2021-12-07  1:51 ` pinskia at gcc dot gnu.org
  2021-12-07  1:57 ` pinskia at gcc dot gnu.org
                   ` (6 subsequent siblings)
  10 siblings, 0 replies; 11+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-12-07  1:51 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=34810

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |vgheorgh at gmail dot com

--- Comment #6 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
*** Bug 66350 has been marked as a duplicate of this bug. ***

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

* [Bug c++/34810] accepts invalid dependent(?) type in template class method
       [not found] <bug-34810-4@http.gcc.gnu.org/bugzilla/>
                   ` (3 preceding siblings ...)
  2021-12-07  1:51 ` pinskia at gcc dot gnu.org
@ 2021-12-07  1:57 ` pinskia at gcc dot gnu.org
  2021-12-07  2:03 ` pinskia at gcc dot gnu.org
                   ` (5 subsequent siblings)
  10 siblings, 0 replies; 11+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-12-07  1:57 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=34810

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           See Also|                            |https://gcc.gnu.org/bugzill
                   |                            |a/show_bug.cgi?id=11764

--- Comment #7 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Related to the older bug 11764 (which is fixed the case without typename I
think).

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

* [Bug c++/34810] accepts invalid dependent(?) type in template class method
       [not found] <bug-34810-4@http.gcc.gnu.org/bugzilla/>
                   ` (4 preceding siblings ...)
  2021-12-07  1:57 ` pinskia at gcc dot gnu.org
@ 2021-12-07  2:03 ` pinskia at gcc dot gnu.org
  2021-12-07  2:04 ` pinskia at gcc dot gnu.org
                   ` (4 subsequent siblings)
  10 siblings, 0 replies; 11+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-12-07  2:03 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=34810

--- Comment #8 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
DR 147 is definitely the defect report here. 

Reading the new text still gives me questions about the case if typename is
used:
If the nested-name-specifier nominates a class C, and the name specified after
the nested-name-specifier, when looked up in C, is the injected-class-name of C
(clause Clause 11 [class]), the name is instead considered to name the
constructor of class C. Such a constructor name shall only be used in the
declarator-id of a constructor definition that appears outside of the class
definition.

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

* [Bug c++/34810] accepts invalid dependent(?) type in template class method
       [not found] <bug-34810-4@http.gcc.gnu.org/bugzilla/>
                   ` (5 preceding siblings ...)
  2021-12-07  2:03 ` pinskia at gcc dot gnu.org
@ 2021-12-07  2:04 ` pinskia at gcc dot gnu.org
  2021-12-07  2:22 ` pinskia at gcc dot gnu.org
                   ` (3 subsequent siblings)
  10 siblings, 0 replies; 11+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-12-07  2:04 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=34810

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
               Host|i386-portbld-freebsd6.2     |
              Build|i386-portbld-freebsd6.2     |
             Target|i386-portbld-freebsd6.2     |

--- Comment #9 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Note ICC and MSVC both accept this testcase (and the duplicated testcases)
while clang is rejects it.

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

* [Bug c++/34810] accepts invalid dependent(?) type in template class method
       [not found] <bug-34810-4@http.gcc.gnu.org/bugzilla/>
                   ` (6 preceding siblings ...)
  2021-12-07  2:04 ` pinskia at gcc dot gnu.org
@ 2021-12-07  2:22 ` pinskia at gcc dot gnu.org
  2021-12-07  2:55 ` pinskia at gcc dot gnu.org
                   ` (2 subsequent siblings)
  10 siblings, 0 replies; 11+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-12-07  2:22 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=34810

--- Comment #10 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Oh this:
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#318

In a lookup in which the constructor is an acceptable lookup result, if the
nested-name-specifier nominates a class C and the name specified after the
nested-name-specifier, when looked up in C, is the injected class name of C
(clause Clause 11 [class]), the name is instead considered to name the
constructor of class C. [Note: For example, the constructor is not an
acceptable lookup result in an elaborated type specifier so the constructor
would not be used in place of the injected class name.]


So the question becomes is typename is enough here.

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

* [Bug c++/34810] accepts invalid dependent(?) type in template class method
       [not found] <bug-34810-4@http.gcc.gnu.org/bugzilla/>
                   ` (7 preceding siblings ...)
  2021-12-07  2:22 ` pinskia at gcc dot gnu.org
@ 2021-12-07  2:55 ` pinskia at gcc dot gnu.org
  2021-12-07  3:31 ` [Bug c++/34810] [DR1310] accepts invalid dependent " pinskia at gcc dot gnu.org
  2021-12-09  5:59 ` pinskia at gcc dot gnu.org
  10 siblings, 0 replies; 11+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-12-07  2:55 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=34810

--- Comment #11 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Someone who has better understanding of the C++ standard should answer the
question if this is valid or not because I don't understand all of the specific
rules rules which are in play here. Especially when there has been some defect
reports in this area before even.

The question is:
    class B { };
    class A: public B {
        A::B ab;       // B is the inherited injected B
    };
typename A::A a;

vs:
class B { };
class A: public B {
  A::B ab;       // B is the inherited injected B
};
struct A::A a;

CWG 318 clearifies the struct case but I don't see why typename would be
handled here any different from struct case.

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

* [Bug c++/34810] [DR1310] accepts invalid dependent type in template class method
       [not found] <bug-34810-4@http.gcc.gnu.org/bugzilla/>
                   ` (8 preceding siblings ...)
  2021-12-07  2:55 ` pinskia at gcc dot gnu.org
@ 2021-12-07  3:31 ` pinskia at gcc dot gnu.org
  2021-12-09  5:59 ` pinskia at gcc dot gnu.org
  10 siblings, 0 replies; 11+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-12-07  3:31 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=34810

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|accepts invalid             |[DR1310] accepts invalid
                   |dependent(?) type in        |dependent type in template
                   |template class method       |class method
             Blocks|                            |94404
              Alias|                            |cwg1310

--- Comment #12 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Found what changed clang to start rejecting it:
http://wg21.link/cwg1310

[Moved to DR at the April, 2013 meeting.]


Referenced Bugs:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94404
[Bug 94404] [meta-bug] C++ core issues

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

* [Bug c++/34810] [DR1310] accepts invalid dependent type in template class method
       [not found] <bug-34810-4@http.gcc.gnu.org/bugzilla/>
                   ` (9 preceding siblings ...)
  2021-12-07  3:31 ` [Bug c++/34810] [DR1310] accepts invalid dependent " pinskia at gcc dot gnu.org
@ 2021-12-09  5:59 ` pinskia at gcc dot gnu.org
  10 siblings, 0 replies; 11+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-12-09  5:59 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=34810

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |barry.revzin at gmail dot com

--- Comment #13 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
*** Bug 86818 has been marked as a duplicate of this bug. ***

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

end of thread, other threads:[~2021-12-09  5:59 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <bug-34810-4@http.gcc.gnu.org/bugzilla/>
2021-08-11 21:51 ` [Bug c++/34810] accepts invalid dependent(?) type in template class method pinskia at gcc dot gnu.org
2021-12-07  1:48 ` pinskia at gcc dot gnu.org
2021-12-07  1:49 ` pinskia at gcc dot gnu.org
2021-12-07  1:51 ` pinskia at gcc dot gnu.org
2021-12-07  1:57 ` pinskia at gcc dot gnu.org
2021-12-07  2:03 ` pinskia at gcc dot gnu.org
2021-12-07  2:04 ` pinskia at gcc dot gnu.org
2021-12-07  2:22 ` pinskia at gcc dot gnu.org
2021-12-07  2:55 ` pinskia at gcc dot gnu.org
2021-12-07  3:31 ` [Bug c++/34810] [DR1310] accepts invalid dependent " pinskia at gcc dot gnu.org
2021-12-09  5:59 ` pinskia at gcc dot gnu.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).