title: pasting "::" and "Foo" does not give a valid preprocessing token
body: <p>I would like to attach MyNamespace:: to the function defined by the macro:</p>
  
  <pre><code>#define transFunc(func)                                                    \
  dimensionedScalar func(const dimensionedScalar&amp; ds)                        \
  {                                                                          \
      if (!ds.dimensions().dimensionless())                                  \
      {                                                                      \
          FatalErrorIn(#func "(const dimensionedScalar&amp; ds)")                \
              &lt;&lt; "ds not dimensionless"                                      \
              &lt;&lt; abort(FatalError);                                          \
      }                                                                      \
                                                                             \
      return dimensionedScalar                                               \
      (                                                                      \
          #func "(" + ds.name() + ')',                                       \
          dimless,                                                           \
          MyNameSpace::##func(ds.value())                                                 \
      );                  
  
                                                 \
  </code></pre>
  
  <p>}</p>
  
  <p>But When I call </p>
  
  <pre><code>transFunc(Foo)
  </code></pre>
  
  <p>the compiler throws the following error : </p>
  
  <blockquote>
    <p>pasting "::" and "Foo" does not give a valid preprocessing token</p>
  </blockquote>
  
  <p>What is wrong about the way I concatenate tokens above? </p>