I would also like to add that if you do not execute millions of queries / sets per frame, it hardly matters whether they are nested or not. Honestly, do not lose sleep.
Also, keep in mind that just because you put the word "inline" in front of your + declaration does not mean that the compiler will embed your code. He uses various heuristics to figure out if this makes sense, which is often a classic compromise of speed and size. However, there is a brute-force keyword "__forceinline" imprisoned in VC ++ (I'm not sure what it is in GCC), which stomps in heuristic compilers. I really do not recommend it at all, and besides, if you switch to a different architecture, this is likely to be wrong.
Try to put all the function definitions in the implementation file and leave clean declarations for the headers (unless, of course, you metaprogram the template (STL / BOOST / etc), and in this case almost everything is in the headers;))
One of the classic places that people like to embed (at least in video games, where I come from) is in the headings of math. Cross / point products, vector lengths, matrix cleaning, etc. Often placed in the header, which, it seems to me, is not needed. 9/10, it does not matter for performance, and if you ever need to perform a hard loop, for example, converting a large vector array to some matrix, you are probably better off manually executing the built-in math, or even better coding it platform assembler.
Oh, and one more thing, if you feel that you really need a class to be more data than code, consider using a good old structure that does not carry OO baggage with the abstraction that it is there: )
Sorry, this does not mean that there is so much, but I just think it helps to consider use cases in the real world and not depend too much on the settings of the pedantic compiler (believe me, I was there;))
Good luck.
Shane