Table 2: Traits use template specialization to make decisions.
Direction
Template Specialization
[in]
T, const T &, const T *, marshal::in<T>, marshal::in<const T &>, marshal::in<const T *>
[in/out]
T &, T *, marshal::in_out<T&>, marshal::in_out<T*>
[out]
marshal::out<T&>, marshal::out<T*>