C++20 adds a concept called std::default_initializable. The difference in naming compared to std::is_default_constructible seems to be way too obvious to be accidental.
Their specifications are worded differently as well (at least on cppreference), however I don't understand what the effective differences are.
Here's a short summary of the cppreference articles:
std::is_default_constructible<T> requires T foo(); to be well-formed, with the assumption that it's not parsed as a function declaration. In other words (if I understand correctly), T needs to be destructible andT() needs to be well-formed.
(edit: it doesn't seem to require destructibility, so here's the first difference)
std::default_initializable, on the other hand, requires both T foo;, T() and T{} to be well-formed.
Are there any effective differences between those two?
As far as I know, T{} is always interpreted as T() (ignoring most vexing parse, which doesn't count here), so I'm not sure why it's mentioned explicitly. Also T() being well-formed seems to imply T foo; being well-formed.