It does not seem possible to be able to cast a boolean to a smallint.
Whilst the following is possible:
SELECT true::int;
int4
------
1
(1 row)
The following is not (as of 9.4beta3)
SELECT true::smallint;
ERROR: cannot cast type boolean to smallint
It would seem logically consistent that both cases would hold true
Apologies if this is more of a 'feature request' than a bug.
Kind regards,
James