Couldn't catch the stream live, but here are couple comments on today's code.
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:
| char *HeaderCode =
"// Header Code"
"int foo() {"
" return 1;"
"}"
;
|
you can write
| 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.