This might be something too obvious. However, I couldn\'t find the specific answer though many stackoverflow threads talk about different aspects of this.
typede
1) The
sizeofoperator yields the number of bytes in the object representation of its operand. The operand is either an expression, which is an unevaluated operand (Clause 5), or a parenthesized type-id. (emphasis mine)
In your case, it is a type-id so it must be parenthesized. What a type-id is is described in 8.1 Type names [dcl.name].
sizeof tmp should be sizeof (tmp).
As in
if (c <= sizeof tmp) should be if (c <= sizeof (tmp)).
Yup, pretty "obvious and straightforward".