Yes, 'out' is a reserved keyword, so I changed that in both my vertex shader and fragment shader. Thanks for that, I feel stupid now.
Now the shader compiles correctly, however:
cgD3D11LoadProgram(vs, flags); setVertexLayout(vs); // vs is still null even after being set by cgCreateProgramFromFile, so setVertexLayout causes an Access Violation Exception
What would be causing this? My log shows that both cgCreateProgramFromFile and cgD3D11LoadProgram were successful (that is, calling cgGetLastErrorString returns CG_NO_ERROR).