I don't think I'd seen that page ... how are you find it (this question excluded)?
This is the question I found:
// Don't modify code in main!
fn main() {
let s1 = String::from("Hello world");
let s2 = take_ownership(s1);
println!("{}", s2);
}
// Only modify the code below!
fn take_ownership(s: String) {
println!("{}", s);
}
As far as I see, there's no ownership issue that I can see, as s2 is simply whatever is returned by take_ownership which would be straightforwardly owned by s2 throughout main. Meanwhile s within take_ownership is obviously owned within that scope.
I'm thinking you're right and that it's a poorly built exercise. We could speculate on what they were trying to do ... such as trying to print s1 after it has been moved to take_ownership ... but in the end it's a relatively simply bit of code and we'd probably be better off moving on ... unless I'm missing something of course.
If the idea were to print s1 after the take_ownership call, then that'd require a borrow, which would require modifying both main and take_ownership, so who knows?