Explicitely passing a parameter by reference in C++03
I can't see anything I would do majorly different.


I would make the member T &amp; m_value private.  
I would change the name of the method byRef() to just ref()

Note you still have a difference in identifiers.
The class is Ref while the function is ref()



The only problem I see is that at inside the function, the object is not automatically usable in its native type you need to cast it back before you can use it:

struct X { void print();};

void print(Ref&lt;X&gt; x)
{
    x.print();  // This fails to compile

    // To use the x object I need to cast it back to an X
    static_cast&lt;X&amp;&gt;(x).print();

    // If we are going to use it multiple times then we could set up
    // a local reference to the object as this will generate an implicit cast
    X&amp;  x1 = x;
    x1.print();
}


Thus getting at methods in the object becomes slightly on the messy side.