[Bug c++/48948] [C++0x] constexpr friend function cannot be defined in-class
schaub.johannes at googlemail dot com
gcc-bugzilla@gcc.gnu.org
Tue May 10 16:56:00 GMT 2011
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48948
--- Comment #3 from Johannes Schaub <schaub.johannes at googlemail dot com> 2011-05-10 16:46:18 UTC ---
(In reply to comment #2)
> (In reply to comment #1)
>
> I don't think that this is intended, but I would like to await feedback from
> the developer group before submitting a corresponding core issue. IMO there are
> some core wordings in regard to type completeness that are not intended to be
> read strictly, e.g. 3.2 p.4
>
> "— a function with a return type or argument type of type T is defined (3.1)
> [..]"
>
> can be read to disallow any of the following function definitions:
>
> struct A {
> A f(A a) { return a; }
> friend A g(A a) { return a; }
> };
>
> I haven't seen a compiler who rejects this code, because they all contribute
> more weight to 9.2 p.2.
Within "A a" (the parameters) and within "A f" / "A g" (the return types), the
class A is incomplete. Only within the function bodies, the class A is complete
by 9.2p2.
The compilers accept that code because of 8.3.5p9. 3.2 p4 is a non-normative
big note, which can impossibly achieve the precision of covering every detail.
It only provides a rough description.
More information about the Gcc-bugs
mailing list