I noticed for general reals these functions call signatures take the form:
trunc{T<:Integer}(::Type{T<:Integer}, x::Number)
However, for rationals, the signature is actually:
trunc{T}(::Type{T}, x::Rational)
This means that you can do things like trunc(Float64,5//2), while trunc(Float64,x) is not defined for numeric types. Additionally trunc(1.0) returns a Float64 but trunc(Float64,1.0) is undefined. It seems to me, either these operations should allow any Real output type or be consistently restricted to integers (i.e. trunc{T<:Integer}(::Type{T}, x::Rational)).
Also if trunc to floats actually makes sense things like trunc(Float64,2^53+1//1) should throw an inexact error.
One last note that is sort of related: If one wants to use the unsafe_trunc function to speed up some code (with the understanding of its limitations) you have to make sure it is actually being given floats. I currently get around this by writing something like unsafe_trunc{T<:Integer}(::Type{T}, x::Number) = trunc(T,x). is there any reason this fallback behavior for this function should not be included in Julia by default?