public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/102529] New: ctad for aliases fails in the presence of constraints
@ 2021-09-29 15:11 barry.revzin at gmail dot com
  2021-09-29 15:24 ` [Bug c++/102529] " ppalka at gcc dot gnu.org
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: barry.revzin at gmail dot com @ 2021-09-29 15:11 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 102529
           Summary: ctad for aliases fails in the presence of constraints
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: barry.revzin at gmail dot com
  Target Milestone: ---

Here's an example:

template <typename T>
struct C {
    template <typename U>
    C(U);
};

template <typename U>
C(U) -> C<U*>;

template <typename T>
    requires true
using A = C<T>;

C ok(1);   // ok, a is a C<int*>
A bad(2);  // fails

The provided error on gcc 11.2 (and trunk as of this writing) is:

<source>:15:8: error: class template argument deduction failed:
   15 | A bad(2);  // fails
      |        ^
<source>:15:8: error: no matching function for call to 'C(int)'
<source>:2:8: note: candidate: 'template<class T> C(C<T>)-> C<T> requires 
__is_same(A<T>, C<T>)'
    2 | struct C {
      |        ^
<source>:2:8: note:   template argument deduction/substitution failed:
<source>:15:8: note:   mismatched types 'C<T>' and 'int'
   15 | A bad(2);  // fails
      |        ^
<source>:4:5: note: candidate: 'template<class T, class U> C(U)-> C<T> requires
 __is_same(A<T>, C<T>)'
    4 |     C(U);
      |     ^
<source>:4:5: note:   template argument deduction/substitution failed:
<source>:15:8: note:   couldn't deduce template parameter 'T'
   15 | A bad(2);  // fails
      |        ^

If you drop the "requires true" part of the alias template A, then this works.
As far as I understand the rules, this should work. MSVC accepts the example.
clang does not yet implement class template argument deduction for alias
templates.

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

* [Bug c++/102529] ctad for aliases fails in the presence of constraints
  2021-09-29 15:11 [Bug c++/102529] New: ctad for aliases fails in the presence of constraints barry.revzin at gmail dot com
@ 2021-09-29 15:24 ` ppalka at gcc dot gnu.org
  2022-06-02 19:22 ` ppalka at gcc dot gnu.org
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: ppalka at gcc dot gnu.org @ 2021-09-29 15:24 UTC (permalink / raw)
  To: gcc-bugs

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

Patrick Palka <ppalka at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
     Ever confirmed|0                           |1
           Assignee|unassigned at gcc dot gnu.org      |ppalka at gcc dot gnu.org
                 CC|                            |ppalka at gcc dot gnu.org
   Last reconfirmed|                            |2021-09-29
             Status|UNCONFIRMED                 |ASSIGNED

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

* [Bug c++/102529] ctad for aliases fails in the presence of constraints
  2021-09-29 15:11 [Bug c++/102529] New: ctad for aliases fails in the presence of constraints barry.revzin at gmail dot com
  2021-09-29 15:24 ` [Bug c++/102529] " ppalka at gcc dot gnu.org
@ 2022-06-02 19:22 ` ppalka at gcc dot gnu.org
  2022-06-09 13:31 ` ppalka at gcc dot gnu.org
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: ppalka at gcc dot gnu.org @ 2022-06-02 19:22 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #1 from Patrick Palka <ppalka at gcc dot gnu.org> ---
Hmm, it looks like this issue isn't concepts specific.  Any non-trivial alias
template, i.e. one that isn't just a renaming of the underlying template (in
the sense of cwg1286) exhibits this bug.  We still reject the testcase if
define the alias template A as, say,

  template <typename T>
  using A = C<const T>;

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

* [Bug c++/102529] ctad for aliases fails in the presence of constraints
  2021-09-29 15:11 [Bug c++/102529] New: ctad for aliases fails in the presence of constraints barry.revzin at gmail dot com
  2021-09-29 15:24 ` [Bug c++/102529] " ppalka at gcc dot gnu.org
  2022-06-02 19:22 ` ppalka at gcc dot gnu.org
@ 2022-06-09 13:31 ` ppalka at gcc dot gnu.org
  2023-02-09 22:04 ` jason at gcc dot gnu.org
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: ppalka at gcc dot gnu.org @ 2022-06-09 13:31 UTC (permalink / raw)
  To: gcc-bugs

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

Patrick Palka <ppalka at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Assignee|ppalka at gcc dot gnu.org          |unassigned at gcc dot gnu.org
             Status|ASSIGNED                    |NEW

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

* [Bug c++/102529] ctad for aliases fails in the presence of constraints
  2021-09-29 15:11 [Bug c++/102529] New: ctad for aliases fails in the presence of constraints barry.revzin at gmail dot com
                   ` (2 preceding siblings ...)
  2022-06-09 13:31 ` ppalka at gcc dot gnu.org
@ 2023-02-09 22:04 ` jason at gcc dot gnu.org
  2023-03-09 15:28 ` cvs-commit at gcc dot gnu.org
  2023-03-09 15:29 ` jason at gcc dot gnu.org
  5 siblings, 0 replies; 7+ messages in thread
From: jason at gcc dot gnu.org @ 2023-02-09 22:04 UTC (permalink / raw)
  To: gcc-bugs

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

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

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

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

* [Bug c++/102529] ctad for aliases fails in the presence of constraints
  2021-09-29 15:11 [Bug c++/102529] New: ctad for aliases fails in the presence of constraints barry.revzin at gmail dot com
                   ` (3 preceding siblings ...)
  2023-02-09 22:04 ` jason at gcc dot gnu.org
@ 2023-03-09 15:28 ` cvs-commit at gcc dot gnu.org
  2023-03-09 15:29 ` jason at gcc dot gnu.org
  5 siblings, 0 replies; 7+ messages in thread
From: cvs-commit at gcc dot gnu.org @ 2023-03-09 15:28 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #2 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The trunk branch has been updated by Jason Merrill <jason@gcc.gnu.org>:

https://gcc.gnu.org/g:afe1f0c251d0429069c2414d4f3f14042efc174f

commit r13-6556-gafe1f0c251d0429069c2414d4f3f14042efc174f
Author: Jason Merrill <jason@redhat.com>
Date:   Thu Feb 9 12:58:35 2023 -0800

    c++: CTAD for less-specialized alias template [PR102529]

    The standard was unclear what happens with the transformation of a
deduction
    guide if the initial template argument deduction fails for a reason other
    than not deducing all the arguments; my implementation assumed that the
    right thing was to give up on the deduction guide.  But in consideration of
    CWG2664 this week I realized that we get a better result by just continuing
    with an empty set of deductions, so the alias deduction guide is the same
as
    the original deduction guide plus the deducible constraint.

            DR 2664
            PR c++/102529

    gcc/cp/ChangeLog:

            * pt.cc (alias_ctad_tweaks): Continue after deduction failure.

    gcc/testsuite/ChangeLog:

            * g++.dg/DRs/dr2664.C: New test.
            * g++.dg/cpp2a/class-deduction-alias15.C: New test.

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

* [Bug c++/102529] ctad for aliases fails in the presence of constraints
  2021-09-29 15:11 [Bug c++/102529] New: ctad for aliases fails in the presence of constraints barry.revzin at gmail dot com
                   ` (4 preceding siblings ...)
  2023-03-09 15:28 ` cvs-commit at gcc dot gnu.org
@ 2023-03-09 15:29 ` jason at gcc dot gnu.org
  5 siblings, 0 replies; 7+ messages in thread
From: jason at gcc dot gnu.org @ 2023-03-09 15:29 UTC (permalink / raw)
  To: gcc-bugs

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

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

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

--- Comment #3 from Jason Merrill <jason at gcc dot gnu.org> ---
Fixed for GCC 13.

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

end of thread, other threads:[~2023-03-09 15:29 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-29 15:11 [Bug c++/102529] New: ctad for aliases fails in the presence of constraints barry.revzin at gmail dot com
2021-09-29 15:24 ` [Bug c++/102529] " ppalka at gcc dot gnu.org
2022-06-02 19:22 ` ppalka at gcc dot gnu.org
2022-06-09 13:31 ` ppalka at gcc dot gnu.org
2023-02-09 22:04 ` jason at gcc dot gnu.org
2023-03-09 15:28 ` cvs-commit at gcc dot gnu.org
2023-03-09 15:29 ` jason 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).