Instead of checking validation on program you should use check compile and link status. Compile/link status is exactly what it says - if compilation of shader, or linking of program succeeded or failed. Validate does a bit more. For example, for core context it checks if currently there is non zero VAO bound. Basically anything that might make glDrawArrays/glDrawElements to fail at place where the glValidateProgram is called. This is probably not what you want, because I assume you won't be bounding buffers, setting attribute pointers & friends at shader compilation place.
Visual Studio 2013 supports C++11 raw string literals that can be multiline. So instead of this:
1 2 3 4 5 6 | char *HeaderCode = "// Header Code" "int foo() {" " return 1;" "}" ; |
1 2 3 4 5 6 | char *HeaderCode = R"( // Header Code int foo() { return 1; } )"; |
which is maybe a bit nicer to use. And it will put \n symbols automatically in the string for better error reporting so. GCC and clang supports this C++11 feature for many years already.