I say that -I C:\boost-1.57.0\include is better and more consistent with expectations.
In addition, it also makes more sense even on its own. It's more consistent for "b2 headers" to create a "virtual" directory $BOOST/include from the contents of $BOOST/libs/*/include; putting the contents of $BOOST/libs/*/include into $BOOST doesn't seem right. This would have been obvious if we had headers in libs/*/include, but since these directories always have their headers in a boost/ subdirectory, "b2 headers" puts nothing directly into $BOOST, so it works fine. Still, I can't think of any reason of insisting upon the current structure. Yes, "b2 install" will put things in their proper place (on Linux), and yes, even without "b2 install" I can easily symlink /usr/include/boost to $BOOST/boost (on Linux), so it doesn't actually hurt (on Linux). On Windows, one typical use is to unpack the Boost distribution into its final location and just b2 stage (without b2 install). Which works fine, and b2 then says, please add $BOOST to your include path and $BOOST/stage/lib to your library path. Which also works fine, except that first thing should, in my opinion, be $BOOST/include. What are the benefits of not putting the headers into include/? None as far as I can see.