Why is a `<:Any`

constraint equivalent to there being no constraint?

For abstract types:

```
julia> abstract type A{T <: Any} end
julia> A{2} # Succeeds even though 2 doesn't subtype Any
A{2}
```

For concrete types:

```
julia> struct S{T <: Any} end
julia> S{2} # Succeeds even though 2 doesn't subtype Any
S{2}
```

For methods:

```
julia> f(::Val{T}) where {T <: Any} = nothing
f (generic function with 1 method)
julia> f(Val{2}()) # Succeeds even though 2 doesn't subtype Any
```

The above behavior seems to be inconsistent with how subtyping constraints work for all other types except for `Any`

, a constraint `A <: B`

is only valid if `A`

subtypes `B`

, *except* if `B`

is `Any`

. For example:

```
julia> struct R{T <: Number} end
julia> R{2}
ERROR: TypeError: in R, in T, expected T<:Number, got a value of type Int64
```

The operator `<:`

, in expressions, doesnâ€™t exhibit this inconsistency: `2 <: Any`

fails just the same as `2 <: Number`

:

```
julia> 2 <: Any
ERROR: TypeError: in <:, expected Type, got a value of type Int64
```

```
julia> 2 <: Number
ERROR: TypeError: in <:, expected Type, got a value of type Int64
```

EDIT: fixed source code formatting