Ah well,
julia> isinteger(typemax(Int) + 0.5)
true
Although,
julia> isinteger(typemax(Int32) + 0.5)
false
julia> isinteger(typemin(Int32) + 0.5)
false
but this is still not inferred
julia> @code_typed (n -> isinteger(n+0.5))(Int32(1))
CodeInfo(
1 ─ %1 = Base.sitofp(Float64, n)::Float64
│ %2 = Base.add_float(%1, 0.5)::Float64
│ %3 = Base.trunc_llvm(%2)::Float64
│ %4 = Base.sub_float(%2, %3)::Float64
│ %5 = Base.eq_float(%4, 0.0)::Bool
│ %6 = Base.and_int(%5, true)::Bool
│ %7 = Base.and_int(%6, true)::Bool
└── return %7
) => Bool