// P0892R2 // { dg-do compile } // { dg-options "-std=c++2a" } template<int M = 0> struct A { template<typename T, int N = 0> explicit(N + M) operator T(); }; template<int M = 1> struct B { template<typename T, int N = 1> explicit(N * M) operator T(); }; void bar () { A a; int i = a; A<0> a0; int i0 = a0; A<1> a1; int i1 = a1; // { dg-error "cannot convert" } B b; int j = b; // { dg-error "cannot convert" } B<0> b0; int j0 = b0; B<1> b1; int j1 = b1; // { dg-error "cannot convert" } }