Is explicit exactly same as =delete?
I think they get different results with a brace initializer:

void f(int);
void f(auto) = delete;

void g(explicit int);

int main() {
  f({});  // OK
  g({});  // ERROR
  g(int{});  // OK
}

2022年5月3日(火) 18:42 Bo Persson via Std-Proposals <std-proposals@lists.isocpp.org>:
On 2022-05-03 at 09:23, Abdullah Qasim via Std-Proposals wrote:
> But learning it, & understanding it takes 30 sec.
>
> Instead of:
>
> “What are these functions deleted?”
>
> Why not:
> “Oh, ok, these are explicit types!”


So then we have to wonder "this library has deleted member functions,
but that library uses explicit types. Why did they do that? What is the
difference? None?!".


>
> *From: *Jens Maurer via Std-Proposals
> <mailto:std-proposals@lists.isocpp.org>
> *Sent: *03 May 2022 12:22
> *To: *Abdullah Qasim via Std-Proposals
> <mailto:std-proposals@lists.isocpp.org>
> *Cc: *Jens Maurer <mailto:Jens.Maurer@gmx.net>
> *Subject: *Re: [std-proposals] explicit keyword (new use)
>
> On 03/05/2022 08.51, Abdullah Qasim via Std-Proposals wrote:
>  > But here is the thing:
>  >
>  >
>  >
>  > Why not make code simpler??
>
> Because it requires everybody to learn a new wrinkle of
> the language.  That cost has to be weighed against the
> perceived increase in simplicity.
>
> Jens
>
>
>  > Why write multiple “= delete” functions, conscientiously tracking all
> conversions, when explicit inside functions is much simpler??
>  >
>  >
>  >
>  > Also, someone suggested explicit template parameters, like this:
>  >
>  >
>  >
>  > *template <explicit typename T>*
>  >
>  >
>  >
>  > Why not have consistence, & allow:
>  >
>  >
>  >
>  > *int func (explicit int x, int y)*
>  >
>  >
>  >
>  > as well?
>  >
>  >
>  >
>  > *From: *Jason McKesson via Std-Proposals
> <mailto:std-proposals@lists.isocpp.org
> <mailto:std-proposals@lists.isocpp.org>>
>  > *Sent: *01 May 2022 22:07
>  > *To: *std-proposals@lists.isocpp.org
> <mailto:std-proposals@lists.isocpp.org
> <mailto:std-proposals@lists.isocpp.org>>
>  > *Cc: *Jason McKesson <mailto:jmckesson@gmail.com
> <mailto:jmckesson@gmail.com>>
>  > *Subject: *Re: [std-proposals] explicit keyword (new use)
>  >
>  >
>  >
>  > We have `= delete` for removing unwanted conversions. Indeed, you can
>  > basically force the use of `int` with:
>  >
>  > template<typename T>
>  > int func (int, T) = delete;
>  >
>  > Any call to `func` that doesn't pass an `int` as the second parameter
>  > will fail to compile. Even things convertible to `int` will not be
>  > used.
>  >
>  > If you want to allow more things to call it, you can only cull out
>  > floating-point types with this overload:
>  >
>  > int func(int, double) = delete;
>  >
>  > Calling func(5, 1) will work, but func(5, 3.4) or even func(5, 2.3f)
>  > will fail. This preserves the ability to call it with types
>  > convertible to `int` (but those which are convertible to `int` *and*
>  > floats will fail due to ambiguity).
>  >
>  > On Sun, May 1, 2022 at 3:57 AM Abdullah Qasim via Std-Proposals
>  > <std-proposals@lists.isocpp.org> wrote:
>  >>
>  >>
>  >>
>  >> int func (int var, explicit int select_menu)
>  >>
>  >> {
>  >>
>  >>     /// ...
>  >>
>  >> }
>  >>
>  >>
>  >>
>  >> Why would I want user to put a double value in select_menu ???
>  >>
>  >>
>  >>
>  >> Also, why would I want to disallow a double in var ???
>  >>
>  >>
>  >>
>  >> The solution:
>  >>
>  >>             Allow explicit in param list!!
>  >>
>  >>
>  >>
>  >> Not too hard to implement, either.
>  >>
>  >> --


--
Std-Proposals mailing list
Std-Proposals@lists.isocpp.org
https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals