The following code snippet causes the copy constructor to be called where I expected the move constructor to be called:
#include struct Foo {
Unfortunately, VS11 doesn't provide a default move constructor. See Move Semantics in the Remarks section - to quote:
Unlike the default copy constructor, the compiler does not provide a default move constructor.