public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/51203] New: Recursive alias templates not working
@ 2011-11-18  7:49 pubby.8 at gmail dot com
  2011-11-18  8:22 ` [Bug c++/51203] " pubby.8 at gmail dot com
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: pubby.8 at gmail dot com @ 2011-11-18  7:49 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51203

             Bug #: 51203
           Summary: Recursive alias templates not working
    Classification: Unclassified
           Product: gcc
           Version: 4.7.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: pubby.8@gmail.com


-std=c++11
gcc version 4.7.0 20111112 (experimental) (GCC)

I presume this is correctly formed code:

template <typename t>
struct foo {
  template <int n>
  using next = typename foo<t>::next<n + 1>;
};

main.cpp:4:37: error: expected ‘;’ before ‘<’ token
main.cpp:4:37: error: expected unqualified-id before ‘<’ token

Interestingly, changing the line to this compiles so long as next isn't used:

  using next = typename foo<t>::next;

The error is very similar to this ill-formed code:

  using next<n> = int;

main.cpp:4:13: error: expected ‘=’ before ‘<’ token
main.cpp:4:13: error: expected type-specifier before ‘<’ token
main.cpp:4:13: error: expected ‘;’ before ‘<’ token
main.cpp:4:13: error: expected unqualified-id before ‘<’ token


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

* [Bug c++/51203] Recursive alias templates not working
  2011-11-18  7:49 [Bug c++/51203] New: Recursive alias templates not working pubby.8 at gmail dot com
@ 2011-11-18  8:22 ` pubby.8 at gmail dot com
  2011-11-18  8:27 ` [Bug c++/51203] Recursive alias template specialization causes compiler segfault pubby.8 at gmail dot com
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: pubby.8 at gmail dot com @ 2011-11-18  8:22 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51203

--- Comment #1 from Pubby8 <pubby.8 at gmail dot com> 2011-11-18 07:53:36 UTC ---
Whoops! I seem to have left out the template qualifier.

template <typename t>
struct foo {
  template <int n>
  using next = typename foo<t>::next<n + 1>;
  template <>
  using next<10> = int; // not sure if alias templates can be specialized
};

int main() {
  foo<int>::next<1> x;
}

Although now I am getting a compiler seg fault:

main.cpp:5:13: error: explicit specialization in non-namespace scope ‘struct
foo<t>’
g++-4.7: internal compiler error: Segmentation fault (program cc1plus)


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

* [Bug c++/51203] Recursive alias template specialization causes compiler segfault
  2011-11-18  7:49 [Bug c++/51203] New: Recursive alias templates not working pubby.8 at gmail dot com
  2011-11-18  8:22 ` [Bug c++/51203] " pubby.8 at gmail dot com
@ 2011-11-18  8:27 ` pubby.8 at gmail dot com
  2011-11-18 19:17 ` [Bug c++/51203] [C++0x] " daniel.kruegler at googlemail dot com
  2011-11-25 13:28 ` dodji at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: pubby.8 at gmail dot com @ 2011-11-18  8:27 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51203

Pubby8 <pubby.8 at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Severity|normal                      |trivial


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

* [Bug c++/51203] [C++0x] Recursive alias template specialization causes compiler segfault
  2011-11-18  7:49 [Bug c++/51203] New: Recursive alias templates not working pubby.8 at gmail dot com
  2011-11-18  8:22 ` [Bug c++/51203] " pubby.8 at gmail dot com
  2011-11-18  8:27 ` [Bug c++/51203] Recursive alias template specialization causes compiler segfault pubby.8 at gmail dot com
@ 2011-11-18 19:17 ` daniel.kruegler at googlemail dot com
  2011-11-25 13:28 ` dodji at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: daniel.kruegler at googlemail dot com @ 2011-11-18 19:17 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51203

Daniel Krügler <daniel.kruegler at googlemail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |daniel.kruegler at
                   |                            |googlemail dot com

--- Comment #2 from Daniel Krügler <daniel.kruegler at googlemail dot com> 2011-11-18 19:03:14 UTC ---
(In reply to comment #1)
> template <typename t>
> struct foo {
>   template <int n>
>   using next = typename foo<t>::next<n + 1>;
>   template <>
>   using next<10> = int; // not sure if alias templates can be specialized
> };

Alias templates cannot be specialized, this is by design.


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

* [Bug c++/51203] [C++0x] Recursive alias template specialization causes compiler segfault
  2011-11-18  7:49 [Bug c++/51203] New: Recursive alias templates not working pubby.8 at gmail dot com
                   ` (2 preceding siblings ...)
  2011-11-18 19:17 ` [Bug c++/51203] [C++0x] " daniel.kruegler at googlemail dot com
@ 2011-11-25 13:28 ` dodji at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: dodji at gcc dot gnu.org @ 2011-11-25 13:28 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51203

Dodji Seketeli <dodji at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|                            |FIXED

--- Comment #3 from Dodji Seketeli <dodji at gcc dot gnu.org> 2011-11-25 12:59:05 UTC ---
commenting on the below,

    template <typename t>
    struct foo {
      template <int n>
      using next = typename foo<t>::next<n + 1>;//#1
      template <>
      using next<10> = int; // #2 not sure if alias templates can be
specialized
    };

I think #1 is invalid because [temp.alias]/3 says:

    "The type-id in an alias template declaration shall not refer to the
    alias template being declared."

In other words, the name "next" should not appear at the right hand
side of the "=" in the alias template declaration there.

And in #2, there is the additional invalid specialization of the alias
template, already raised by Daniel on comment #2.

Furthermore, I am not getting any ICE anymore on this from trunk of today
at revision r181718.

So I am closing this as fixed for now.

Thank you for filing this.


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

end of thread, other threads:[~2011-11-25 12:59 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-11-18  7:49 [Bug c++/51203] New: Recursive alias templates not working pubby.8 at gmail dot com
2011-11-18  8:22 ` [Bug c++/51203] " pubby.8 at gmail dot com
2011-11-18  8:27 ` [Bug c++/51203] Recursive alias template specialization causes compiler segfault pubby.8 at gmail dot com
2011-11-18 19:17 ` [Bug c++/51203] [C++0x] " daniel.kruegler at googlemail dot com
2011-11-25 13:28 ` dodji 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).