In my project so far, I use many traits to permit mocking/stubbing in unit tests for injected dependencies. However, one detail of what I\'m doing so far seems so suspicious
It is indeed different. The impl version is equivalent to the following:
fn confirm>(subject: M) ...
so unlike the first version, subject is moved (passed by value) into confirm, rather than passed by reference. So in the impl version, confirm takes ownership of this value.