public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/99699] New: Type deduction failure for deducing a non-type template parameter via another deducible structural type (class template specialization) non-type template parameter
@ 2021-03-21 18:14 davveston at gmail dot com
  2022-04-07  9:30 ` [Bug c++/99699] " davveston at gmail dot com
  2022-06-02 18:06 ` ppalka at gcc dot gnu.org
  0 siblings, 2 replies; 3+ messages in thread
From: davveston at gmail dot com @ 2021-03-21 18:14 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 99699
           Summary: Type deduction failure for deducing a non-type
                    template parameter via another deducible structural
                    type (class template specialization) non-type template
                    parameter
           Product: gcc
           Version: 11.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: davveston at gmail dot com
  Target Milestone: ---

The following program:

// --------------------------------------------
template<int N>    struct S {};
template<S s>      struct U {};
template<typename> struct V { V() = delete; };

template <int N, S<N> s>
struct V<U<s>> {};

V<U<S<0>{}>> v{};  // #1
// Expected:   use partial specialization #1
// GCC actual: error (rejects-valid): use of deleted function

int main() {}
// --------------------------------------------

is rejected by gcc HEAD 11.0.1 20210320 (experimental) when compiling with 'g++
prog.cc -Wall -Wextra -std=c++2b', as #1 matches to the primary template
instead of the partial specialization.

It seems to find the non-type template parameter N non-deducible; however all
arguments of the partial specialization are arguably deducible from the
'U<S<0>{}>' argument to the primary template:

- 'A' / 'P' matching 'U<S<0>{}>' / 'U<s>' deduces 's' to 'S<0>{}' and its type
to 'S<0>',
- 'A' / 'P' matching 'S<0>' to 'S<N>' deduces 'N' to '0'; 'N' is particularly
not in a non-deduced context above, as it's not used in sub-expression in the
non-type template parameter 's' of the partial specialization.

Demo: https://wandbox.org/permlink/QQQxa3BhBTMM476E

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

* [Bug c++/99699] Type deduction failure for deducing a non-type template parameter via another deducible structural type (class template specialization) non-type template parameter
  2021-03-21 18:14 [Bug c++/99699] New: Type deduction failure for deducing a non-type template parameter via another deducible structural type (class template specialization) non-type template parameter davveston at gmail dot com
@ 2022-04-07  9:30 ` davveston at gmail dot com
  2022-06-02 18:06 ` ppalka at gcc dot gnu.org
  1 sibling, 0 replies; 3+ messages in thread
From: davveston at gmail dot com @ 2022-04-07  9:30 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #1 from David Friberg <davveston at gmail dot com> ---
This seems to have been fixed on trunk/GCC 12:
https://wandbox.org/permlink/qq207mBL7q5ndRgS

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

* [Bug c++/99699] Type deduction failure for deducing a non-type template parameter via another deducible structural type (class template specialization) non-type template parameter
  2021-03-21 18:14 [Bug c++/99699] New: Type deduction failure for deducing a non-type template parameter via another deducible structural type (class template specialization) non-type template parameter davveston at gmail dot com
  2022-04-07  9:30 ` [Bug c++/99699] " davveston at gmail dot com
@ 2022-06-02 18:06 ` ppalka at gcc dot gnu.org
  1 sibling, 0 replies; 3+ messages in thread
From: ppalka at gcc dot gnu.org @ 2022-06-02 18:06 UTC (permalink / raw)
  To: gcc-bugs

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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
         Resolution|---                         |DUPLICATE
                 CC|                            |ppalka at gcc dot gnu.org
             Status|UNCONFIRMED                 |RESOLVED

--- Comment #2 from Patrick Palka <ppalka at gcc dot gnu.org> ---
Fixed with r12-7966-g95533fe4f014c1, so PR105110 was a duplicate of this.

*** This bug has been marked as a duplicate of bug 105110 ***

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

end of thread, other threads:[~2022-06-02 18:06 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-21 18:14 [Bug c++/99699] New: Type deduction failure for deducing a non-type template parameter via another deducible structural type (class template specialization) non-type template parameter davveston at gmail dot com
2022-04-07  9:30 ` [Bug c++/99699] " davveston at gmail dot com
2022-06-02 18:06 ` ppalka 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).