Actually I don't agree with this. The body of the attribute should be executed if not yet initialized and if the type has not default value. An expanded type has a default value thus it will never be called. What we should do is produce a warning when such code appears because it is quite troubling when it does not do what you expected it to do.