https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102157
Bug ID: 102157 Summary: floating-integral conversions is not permitted in the user-defined conversion sequence in converted constant expression Product: gcc Version: 12.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: xmh970252187 at gmail dot com Target Milestone: --- struct A{ constexpr A(double const& rf){} }; template<class T, T B> struct C{}; int main() { C<A,0> b; } This code is accepted by GCC while rejected by Clang. [temp.arg.nontype] p2 > A template-argument for a non-type template-parameter shall be a converted > constant expression ([expr.const]) of the type of the template-parameter. >From a prvalue of type `int` to type `A`, the user-defined conversion sequence will involve floating-integral conversions that are not permitted in [expr.const] p10. GCC should reject this example.