Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[clang] Implement provisional wording for CWG2398 regarding packs #90820

Merged
merged 1 commit into from
May 16, 2024

Commits on May 16, 2024

  1. [clang] Implement provisional wording for CWG2398 regarding packs

    This solves some ambuguity introduced in P0522 regarding how
    template template parameters are partially ordered, and should reduce
    the negative impact of enabling `-frelaxed-template-template-args`
    by default.
    
    When performing template argument deduction, a template template parameter
    containing no packs should be more specialized than one that does.
    
    Given the following example:
    ```C++
    template<class T2> struct A;
    template<template<class ...T3s> class TT1, class T4> struct A<TT1<T4>>; // #1
    template<template<class    T5 > class TT2, class T6> struct A<TT2<T6>>; // #2
    
    template<class T1> struct B;
    template struct A<B<char>>;
    ```
    
    Prior to P0522, candidate #2 would be more specialized.
    After P0522, neither is more specialized, so this becomes ambiguous.
    With this change, #2 becomes more specialized again,
    maintaining compatibility with pre-P0522 implementations.
    
    The problem is that in P0522, candidates are at least as specialized
    when matching packs to fixed-size lists both ways, whereas before,
    a fixed-size list is more specialized.
    
    This patch keeps the original behavior when checking template arguments
    outside deduction, but restores this aspect of pre-P0522 matching
    during deduction.
    
    ---
    
    Since this changes provisional implementation of CWG2398 which has
    not been released yet, and already contains a changelog entry,
    we don't provide a changelog entry here.
    mizvekov committed May 16, 2024
    Configuration menu
    Copy the full SHA
    39e0af9 View commit details
    Browse the repository at this point in the history