I argue C++'s mistake was *out-out* implicit constructionWhat do you mean by out-out?
In C++, if you define a struct/class, and constructors apply for this.
struct Test { Test(const char* foo) {} }; void cool(Test t) {} cool("string"); // worksThat works in C++, unless you mark that constructor with `explicit`
struct Test {explicit Test(const char* foo) {} // this opts out of the cool thing above
};