This is quite the result of a C++ template limitation…
Try again with:
vec3 a = vec3(2,2,2) * 0.5f
And it will works.
vec3 is based on float, not double (use dvec3 for that).
In GLM both side of binary operator must match because otherwise how do you choose the returned type? Some rules can be defined but this requires to avoid using template and define each single operator…
With a *= 0.5, the returned type is defined, the type of a, so no issue here.