When using macros for namespaces the "move implementation" somehow messes it up. I know that a tough one to solve 
example:
#define BEGIN_MYNAMESPACE namespace x { namespace y {
#define END_MYNAMESPACE } }
Now, moving a function from the .h to the .cpp file will produce this:
(.h file)
BEGIN_MYNAMESPACE
  class test
  {
    ... some other functions
    void function1() { return; }
  }
END_MYNAMESPACE
(.cpp file)
BEGIN_MYNAMESPACE
    test::function0()...
    test::ctor() ...
    test::dtor()...
END_MYNAMESPACE
    void x::y::function1()
    {
      return;
    }
You can see that VAX correctly knows the full namespace, thus it expands it and prepends it to the function. But it takes it out of the real context.