public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/55931] New: Constexpr member function inside a static member is not working
@ 2013-01-10  5:04 vince.rev at gmail dot com
  2013-01-10  5:18 ` [Bug c++/55931] [C++11] " pinskia at gcc dot gnu.org
                   ` (8 more replies)
  0 siblings, 9 replies; 10+ messages in thread
From: vince.rev at gmail dot com @ 2013-01-10  5:04 UTC (permalink / raw)
  To: gcc-bugs


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

             Bug #: 55931
           Summary: Constexpr member function inside a static member is
                    not working
    Classification: Unclassified
           Product: gcc
           Version: 4.7.2
            Status: UNCONFIRMED
          Severity: major
          Priority: P3
         Component: c++
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: vince.rev@gmail.com


The call of a constexpr member of a class into a static member of the same
class is not working. This is illustrated by the following code:
(tested on g++ 4.7.1 and 4.7.2, but it may also affect g++ 4.8)

-------------------------------------------------------------------
#include <iostream>
#include <type_traits>

template<typename Type>
class Test
{
    public:
        constexpr Test(const Type val) : _value(val) {}
        constexpr Type get() const {return _value;}
        static void test()
        {
            static constexpr Test<int> x(42);
            std::integral_constant<int, x.get()> i; // This is not working
            std::cout<<i<<std::endl;
        }
    protected:
        Type _value;
};

int main(int argc, char *argv[])
{
    static constexpr Test<int> x(42);
    std::integral_constant<int, x.get()> i; // This is working
    std::cout<<i<<std::endl;
    Test<double>::test();
    return 0;
}
-------------------------------------------------------------------

which produces the following error:

-------------------------------------------------------------------
main.cpp: In static member function ‘static void Test<Type>::test()’:
main.cpp:13:48: erreur: invalid use of ‘Test<Type>::get<int>’ to form a
pointer-to-member-function
main.cpp:13:48: note:   a qualified-id is required
main.cpp:13:48: erreur: could not convert template argument
‘x.Test<Type>::get<int>()’ to ‘int’
main.cpp:13:51: erreur: invalid type in declaration before ‘;’ token
-------------------------------------------------------------------


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

* [Bug c++/55931] [C++11] Constexpr member function inside a static member is not working
  2013-01-10  5:04 [Bug c++/55931] New: Constexpr member function inside a static member is not working vince.rev at gmail dot com
@ 2013-01-10  5:18 ` pinskia at gcc dot gnu.org
  2013-01-11 13:22 ` daniel.kruegler at googlemail dot com
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: pinskia at gcc dot gnu.org @ 2013-01-10  5:18 UTC (permalink / raw)
  To: gcc-bugs


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

--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> 2013-01-10 05:18:11 UTC ---
>             std::integral_constant<int, x.get()> i; // This is not working

Most likely because Test<int> is not complete at the time of parsing.


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

* [Bug c++/55931] [C++11] Constexpr member function inside a static member is not working
  2013-01-10  5:04 [Bug c++/55931] New: Constexpr member function inside a static member is not working vince.rev at gmail dot com
  2013-01-10  5:18 ` [Bug c++/55931] [C++11] " pinskia at gcc dot gnu.org
@ 2013-01-11 13:22 ` daniel.kruegler at googlemail dot com
  2013-01-11 13:27 ` daniel.kruegler at googlemail dot com
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: daniel.kruegler at googlemail dot com @ 2013-01-11 13:22 UTC (permalink / raw)
  To: gcc-bugs


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

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> 2013-01-11 13:22:13 UTC ---
When using gcc 4.8.0 20130106 (experimental)

with flags

-Wall -std=c++11 -pedantic

I get an internal compiler error for the line:

static constexpr Test<int> x(42);

"12|internal compiler error: tree check: expected target_expr, have cast_expr
in check_initializer, at cp/decl.c:5699"

Should this be reported separately?


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

* [Bug c++/55931] [C++11] Constexpr member function inside a static member is not working
  2013-01-10  5:04 [Bug c++/55931] New: Constexpr member function inside a static member is not working vince.rev at gmail dot com
  2013-01-10  5:18 ` [Bug c++/55931] [C++11] " pinskia at gcc dot gnu.org
  2013-01-11 13:22 ` daniel.kruegler at googlemail dot com
@ 2013-01-11 13:27 ` daniel.kruegler at googlemail dot com
  2013-01-11 14:38 ` redi at gcc dot gnu.org
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: daniel.kruegler at googlemail dot com @ 2013-01-11 13:27 UTC (permalink / raw)
  To: gcc-bugs


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

--- Comment #3 from Daniel Krügler <daniel.kruegler at googlemail dot com> 2013-01-11 13:26:46 UTC ---
(In reply to comment #1)
> Most likely because Test<int> is not complete at the time of parsing.

But this should be considered as a compiler defect, right?


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

* [Bug c++/55931] [C++11] Constexpr member function inside a static member is not working
  2013-01-10  5:04 [Bug c++/55931] New: Constexpr member function inside a static member is not working vince.rev at gmail dot com
                   ` (2 preceding siblings ...)
  2013-01-11 13:27 ` daniel.kruegler at googlemail dot com
@ 2013-01-11 14:38 ` redi at gcc dot gnu.org
  2013-01-11 18:32 ` daniel.kruegler at googlemail dot com
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: redi at gcc dot gnu.org @ 2013-01-11 14:38 UTC (permalink / raw)
  To: gcc-bugs


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

Jonathan Wakely <redi at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2013-01-11
     Ever Confirmed|0                           |1
           Severity|major                       |normal

--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> 2013-01-11 14:37:36 UTC ---
(In reply to comment #2)
> Should this be reported separately?

Yes please, but note this PR in the comments and vice versa, in case they turn
out to be fixed by the same change.

(In reply to comment #3)
> But this should be considered as a compiler defect, right?

Right.


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

* [Bug c++/55931] [C++11] Constexpr member function inside a static member is not working
  2013-01-10  5:04 [Bug c++/55931] New: Constexpr member function inside a static member is not working vince.rev at gmail dot com
                   ` (3 preceding siblings ...)
  2013-01-11 14:38 ` redi at gcc dot gnu.org
@ 2013-01-11 18:32 ` daniel.kruegler at googlemail dot com
  2013-02-15 19:29 ` jason at gcc dot gnu.org
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: daniel.kruegler at googlemail dot com @ 2013-01-11 18:32 UTC (permalink / raw)
  To: gcc-bugs


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

--- Comment #5 from Daniel Krügler <daniel.kruegler at googlemail dot com> 2013-01-11 18:32:13 UTC ---
The ICE bug of 4.8.0 has been submitted as bug 55944


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

* [Bug c++/55931] [C++11] Constexpr member function inside a static member is not working
  2013-01-10  5:04 [Bug c++/55931] New: Constexpr member function inside a static member is not working vince.rev at gmail dot com
                   ` (4 preceding siblings ...)
  2013-01-11 18:32 ` daniel.kruegler at googlemail dot com
@ 2013-02-15 19:29 ` jason at gcc dot gnu.org
  2013-03-17  2:42 ` jason at gcc dot gnu.org
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: jason at gcc dot gnu.org @ 2013-02-15 19:29 UTC (permalink / raw)
  To: gcc-bugs


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

Jason Merrill <jason at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |ASSIGNED
         AssignedTo|unassigned at gcc dot       |jason at gcc dot gnu.org
                   |gnu.org                     |

--- Comment #6 from Jason Merrill <jason at gcc dot gnu.org> 2013-02-15 19:29:29 UTC ---
Created attachment 29473
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=29473
55931.patch

Patch waiting for 4.8 to branch.


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

* [Bug c++/55931] [C++11] Constexpr member function inside a static member is not working
  2013-01-10  5:04 [Bug c++/55931] New: Constexpr member function inside a static member is not working vince.rev at gmail dot com
                   ` (5 preceding siblings ...)
  2013-02-15 19:29 ` jason at gcc dot gnu.org
@ 2013-03-17  2:42 ` jason at gcc dot gnu.org
  2013-04-01 21:05 ` jason at gcc dot gnu.org
  2013-12-09 22:53 ` rmansfield at qnx dot com
  8 siblings, 0 replies; 10+ messages in thread
From: jason at gcc dot gnu.org @ 2013-03-17  2:42 UTC (permalink / raw)
  To: gcc-bugs


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

--- Comment #7 from Jason Merrill <jason at gcc dot gnu.org> 2013-03-17 02:40:06 UTC ---
Author: jason
Date: Sun Mar 17 02:39:51 2013
New Revision: 196746

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=196746
Log:
    PR c++/55931
    * parser.c (cp_parser_template_argument): Don't
    fold_non_dependent_expr.

Added:
    trunk/gcc/testsuite/g++.dg/cpp0x/constexpr-template4.C
Modified:
    trunk/gcc/cp/ChangeLog
    trunk/gcc/cp/parser.c


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

* [Bug c++/55931] [C++11] Constexpr member function inside a static member is not working
  2013-01-10  5:04 [Bug c++/55931] New: Constexpr member function inside a static member is not working vince.rev at gmail dot com
                   ` (6 preceding siblings ...)
  2013-03-17  2:42 ` jason at gcc dot gnu.org
@ 2013-04-01 21:05 ` jason at gcc dot gnu.org
  2013-12-09 22:53 ` rmansfield at qnx dot com
  8 siblings, 0 replies; 10+ messages in thread
From: jason at gcc dot gnu.org @ 2013-04-01 21:05 UTC (permalink / raw)
  To: gcc-bugs


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

Jason Merrill <jason at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |RESOLVED
         Resolution|                            |FIXED
   Target Milestone|---                         |4.9.0

--- Comment #8 from Jason Merrill <jason at gcc dot gnu.org> 2013-04-01 21:05:51 UTC ---
Fixed for 4.9.


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

* [Bug c++/55931] [C++11] Constexpr member function inside a static member is not working
  2013-01-10  5:04 [Bug c++/55931] New: Constexpr member function inside a static member is not working vince.rev at gmail dot com
                   ` (7 preceding siblings ...)
  2013-04-01 21:05 ` jason at gcc dot gnu.org
@ 2013-12-09 22:53 ` rmansfield at qnx dot com
  8 siblings, 0 replies; 10+ messages in thread
From: rmansfield at qnx dot com @ 2013-12-09 22:53 UTC (permalink / raw)
  To: gcc-bugs

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

Ryan Mansfield <rmansfield at qnx dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |rmansfield at qnx dot com

--- Comment #9 from Ryan Mansfield <rmansfield at qnx dot com> ---
(In reply to Jason Merrill from comment #6)
> Created attachment 29473 [details]
> 55931.patch
> 
> Patch waiting for 4.8 to branch.

Jason, do you mind moving this over to the 4.8 branch? It seems you intended
to.


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

end of thread, other threads:[~2013-12-09 22:53 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-01-10  5:04 [Bug c++/55931] New: Constexpr member function inside a static member is not working vince.rev at gmail dot com
2013-01-10  5:18 ` [Bug c++/55931] [C++11] " pinskia at gcc dot gnu.org
2013-01-11 13:22 ` daniel.kruegler at googlemail dot com
2013-01-11 13:27 ` daniel.kruegler at googlemail dot com
2013-01-11 14:38 ` redi at gcc dot gnu.org
2013-01-11 18:32 ` daniel.kruegler at googlemail dot com
2013-02-15 19:29 ` jason at gcc dot gnu.org
2013-03-17  2:42 ` jason at gcc dot gnu.org
2013-04-01 21:05 ` jason at gcc dot gnu.org
2013-12-09 22:53 ` rmansfield at qnx dot com

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).