The purpose of Default is just, I think, to provide an arbitrary valid/safe value to “occupy the memory” while an actual value is created to replace it (once ::std::mem::MaybeUninit is stabilized, it could provide cheaper-but-more-dangerous alternative, to stay as far away as possible from
::std::mem::uninitialized or its overlooked cousin ::std::mem::zeroed).
On top of that there appears to be one practical implicit, (that theoretically should not be relied upon although it works well in practice): that the Default value is among the cheaper (when not the cheapest) value(s) to construct.
This is strongly correlated with the following "interpretation of Default" (one that ends up being surprisingly accurate): emptyness
"empty Option<T>" = None. This default is the one that makes more sense.
“empty number” ~ number with no magnitude => 0
“empty collections” is the best example
“empty slice/str” also works.
for product types (e.g., struct, tuple structs & newtypes) it is the product of the recursive defaults, as expected,
general enums: this is the most controversial one, imho, since even false only is justified because of its historical ties to 0. So in the case of an enum, I see Default as a random discriminant.
So, besides the last enum situation, is_default could be used as a hacky way to check for emptiness.
As stated since the beginning of the thread, anyone who wishes to work with a special “default” case should use Option<T> instead (of T : Default), since it provides less ambiguous semantics.
EDIT: After seeing the offical documentation stance on this:
this “emptyness” intuition is wrong and dangerous. My bad.