I am able to avoid the implicit conversion of a constructor using the explicit keyword. So now, conversions like A a1 = 10; can be avoided.
explicit
A a1 = 10;
You can delete A::A();:
delete
A::A();
struct A { explicit A(int a) : num(a) {} template A(T) = delete; int num; }; int main() { //A a1=A(10.0); // error: use of deleted function 'A::A(T) [with T = double]' A a2 = A(10); // OK (void) a2; }
Demo: https://coliru.stacked-crooked.com/a/425afc19003697c9