trunc_cast should be between float/int/uint or to types of lesser precision. also restrict to fundamental types until we actually test with arbitrary types.