Explicitly mark Lock as uncopyable.
Clean up MSVC assignment-within-if warnings.

MSVC at /W4 is much stricter about assignment within conditionals.  The
fix is simple enough, though.
Clean up conversions.
Fix case where symbol ID doesn't fit in a wchar_t.

The symbol ID is the Unicode code point as an int, so it may be larger
than wchar_t (e.g., on Win32, where wchar_t is 16-bits wide).
Clean up warning about constant value in loop.
Explicitly disable assignment.
Clean up uninitialized value warning.

It should actually safe in this case since implementations of
ApplyEffect should check the "valid direction" flag before using the
direction angle.

This is where std::optional would be handy.