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

            Bug ID: 119047
           Summary: "partial specialization is not more specialized than"
                    confused by std::enable_if
           Product: gcc
           Version: 14.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: drahflow at gmx dot de
  Target Milestone: ---

GCC 7.0 to 14.2 warn that "partial specialization is not more specialized than"
the primary template on

#include <type_traits>

template<int N, int M, int Z> struct Tmpl {
  int f() { return 0; }
};

template<int N,
  typename std::enable_if<N % 2 == 0, int>::type M>
struct Tmpl<N, M, 0> {
  int f() { return 1; }
};

int main(void) {
    return Tmpl<6, 6, 0>().f();
}


even though the specialization is (whether or not actually available after all)
more specialized in Z.

Godbolt: https://godbolt.org/z/GEb7f4Y5M

Reply via email to