2 ms·
Seems like it would be confusing to allow let mut nums = Vec::new(); nums.push(nums.len()); but disallow let mut nums = Box::new(Vec::new()); nums.pu
by eridius 11y ago
Seems like it would be confusing to allow
let mut nums = Vec::new();
nums.push(nums.len());
but disallow
let mut nums = Box::new(Vec::new());
nums.push(nums.len());
The second example would have to be disallowed because the mutable reference is created by calling DerefMut::deref_mut().
- cwzwarich 11y agoThe particular case of Box is safe, and is along the lines of special knowledge about Box that is assumed by the type checker, but the special-cased nature of Box has been gradually decreasing over time. I don't think there would be an easy safe way to allow user-defined types to establish same guarantee. In retrospect, changing the evaluation order of a function with respect to its arguments might have been a better choice, but something like the solution I mentioned is probably the only backwards-compatible option.