lock_guard
is always engaged; it always holds a reference to a mutex and always unlocks it in its destructor. If it was movable then it would need to hold a pointer instead of a reference, and test the pointer in its destructor. This might seem a trivial cost, but it is C++ philosophy that you don't pay for what you don't use.
If you want a movable (and releaseable) lock you can use unique_lock
.
You might be interested in n3602 Template parameter deduction for constructors, which removes the need for make_
functions. It won't be in C++14 but we can hope for C++17.