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*>