public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/114569] New: GCC accepts forming pointer to function type which is ref qualified
@ 2024-04-03  7:02 jlame646 at gmail dot com
  2024-04-03 14:25 ` [Bug c++/114569] " mpolacek at gcc dot gnu.org
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: jlame646 at gmail dot com @ 2024-04-03  7:02 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 114569
           Summary: GCC accepts forming pointer to function type which is
                    ref qualified
           Product: gcc
           Version: 14.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jlame646 at gmail dot com
  Target Milestone: ---

In the following program `#2` is accepts by all compilers but `#1` is rejected.
Shouldn't `#2` also be rejected for the same reason.
https://godbolt.org/z/sMraETcbx

```
#include <type_traits> 
template <class Signature>
struct Decompose;

template <class T>
struct Decompose<void(T)> {
    using Type = T;
};

template <class T>
using FTDecay = typename Decompose<void(T)>::Type;



// static_assert(std::is_same_v<FTDecay<int()&>, int (*)() &>);  //#1: all
rejects this as expected 
 FTDecay<int()&> x{};                                            //#2: all
accepts this why? 
```

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

* [Bug c++/114569] GCC accepts forming pointer to function type which is ref qualified
  2024-04-03  7:02 [Bug c++/114569] New: GCC accepts forming pointer to function type which is ref qualified jlame646 at gmail dot com
@ 2024-04-03 14:25 ` mpolacek at gcc dot gnu.org
  2024-04-03 15:16 ` jlame646 at gmail dot com
  2024-04-04  6:58 ` jens.maurer at gmx dot net
  2 siblings, 0 replies; 4+ messages in thread
From: mpolacek at gcc dot gnu.org @ 2024-04-03 14:25 UTC (permalink / raw)
  To: gcc-bugs

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

Marek Polacek <mpolacek at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |mpolacek at gcc dot gnu.org

--- Comment #1 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
[dcl.fct]/10:
A function type with a cv-qualifier-seq or a ref-qualifier shall appear only
as: 
-- [...]
-- the type-id of a template-argument for a type-parameter

So the code should compile.

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

* [Bug c++/114569] GCC accepts forming pointer to function type which is ref qualified
  2024-04-03  7:02 [Bug c++/114569] New: GCC accepts forming pointer to function type which is ref qualified jlame646 at gmail dot com
  2024-04-03 14:25 ` [Bug c++/114569] " mpolacek at gcc dot gnu.org
@ 2024-04-03 15:16 ` jlame646 at gmail dot com
  2024-04-04  6:58 ` jens.maurer at gmx dot net
  2 siblings, 0 replies; 4+ messages in thread
From: jlame646 at gmail dot com @ 2024-04-03 15:16 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #2 from Jason Liam <jlame646 at gmail dot com> ---
(In reply to Marek Polacek from comment #1)
> So the code should compile.

But https://timsong-cpp.github.io/cppwp/n4950/dcl.ptr#4.sentence-2 says:

> [Note 1: [...] Forming a function pointer type is ill-formed if the function type has cv-qualifiers or a ref-qualifier; see [dcl.fct]. [...]]

And since `FTDecay<int()&>` is `int (*)() &`, this should be ill-formed?

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

* [Bug c++/114569] GCC accepts forming pointer to function type which is ref qualified
  2024-04-03  7:02 [Bug c++/114569] New: GCC accepts forming pointer to function type which is ref qualified jlame646 at gmail dot com
  2024-04-03 14:25 ` [Bug c++/114569] " mpolacek at gcc dot gnu.org
  2024-04-03 15:16 ` jlame646 at gmail dot com
@ 2024-04-04  6:58 ` jens.maurer at gmx dot net
  2 siblings, 0 replies; 4+ messages in thread
From: jens.maurer at gmx dot net @ 2024-04-04  6:58 UTC (permalink / raw)
  To: gcc-bugs

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

Jens Maurer <jens.maurer at gmx dot net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jens.maurer at gmx dot net

--- Comment #3 from Jens Maurer <jens.maurer at gmx dot net> ---
Note that the ref-qualified function type is not directly an argument for a
template type parameter (which would be allowed), but it's a function parameter
type inside a function declarator.  And those do decay to (possibly ill-formed)
pointers.

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

end of thread, other threads:[~2024-04-04  6:58 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-04-03  7:02 [Bug c++/114569] New: GCC accepts forming pointer to function type which is ref qualified jlame646 at gmail dot com
2024-04-03 14:25 ` [Bug c++/114569] " mpolacek at gcc dot gnu.org
2024-04-03 15:16 ` jlame646 at gmail dot com
2024-04-04  6:58 ` jens.maurer at gmx dot net

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