I am implementing std::default::Default for a custom type. Due to the contract in the Default trait the method default() needs to return Self. But I want to be able to return a result with a possible error Result<Self, Error>.
I agree with you but I think it's because Default trait is the only constructor trait in rust, if there is a New or Init trait, and it can be failed when creating a instance, that would be better.
That's because you don't need a trait to construct an object in Rust. If you want to create an object, just define a method or function that returns an instance.
Traits are only useful if you want to use their contract as part of an abstraction (i.e. in generics). So many times I've seen traits declare that all implementors must be constructed using a particular way and it ends up unnecessarily constraining them.