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

           Summary: [C++0x] constexpr friend function cannot be defined
                    in-class
           Product: gcc
           Version: 4.7.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: daniel.krueg...@googlemail.com
                CC: ja...@redhat.com


gcc 4.7.0 20110507 (experimental) in C++0x mode rejects the following code at
the line marked with #:

//---
struct B {
  friend constexpr int f(B) { return 0; } // #
};
//---

"error: invalid type for parameter 1 of constexpr function 'constexpr int
f(B)'"

This code should be accepted. 

The same problem occurs with friend operators, like this case

      friend constexpr int operator+(B) { return 0; }

within B resulting in:

"error: invalid type for parameter 1 of constexpr function 'constexpr int
operator+(B)'"

It seems to me that this defect is *not* a dup of bug 48945, where the compiler
incorrectly attempts to add a const-qualifier to a static member function. I
can only assume that the compiler considers the argument as incomplete and thus
not being a valid literal type, because other non-friend constexpr functions
don't cause such problems, but I'm not sure.

Finally, the problem does not occur, if the friend function is defined
out-of-class, like so:

    class C {
      friend constexpr int g(C);
    };

    constexpr int g(C) { return 0; }

Reply via email to