TypeOf
Returns the type of a variable.
Syntax
`
TypeOf ( variable | datatype )
`
Parameters
`variable`
A variable of any type.
`datatype`
A DataType.
Description
`TypeOf` is a compiler intrinsic that replaces itself with the type of the variable passed to it. It can either be used in a variable declaration (Example 1) or it can be used in the preprocessor for comparison, printing. (Example 2)
`TypeOf` also supports passing any intrinsic data type, or user-defined type (and its data fields), not only variables defined as those types. Also supported are expressions, the type is inferred from the expression (much like `Var`).
If there is both a user defined type and a variable visible with the same name in the current scope, the user defined type takes precedence over the variable. To ensure that the `TypeOf` takes the variable instead of the user defined type, wrap the argument to `TypeOf` with parentheses to force it to be seen as an expression. For example `Typeof((variable))`.
Example
Example 1:
`
Dim As Integer foo
Dim As TypeOf(67.2) bar '' '67.2' is a literal double
Dim As TypeOf( foo + bar ) teh_double '' double + integer results in double
Print SizeOf(teh_double)
`
Example 2:
`
Dim As String foo
#print TypeOf(foo)
#if TypeOf(foo) = TypeOf(Integer)
#print "Never happened!"
#endif
#if TypeOf(foo) = TypeOf(String)
#print "It's a String!"
#endif
`
Version

- Before fbc 1.10.0, `TypeOf` was not returning the type of the non-static member procedures of a UDT.
- Before fbc 1.08.0:

`TypeOf` was not returning the type of the data fields of a UDT.
When a variable from a given namespace was accessed with the namespace's name prefix, the argument to `TypeOf` had to be wrapped with parentheses to force it to be seen as an expression. For example `Typeof((namespace_name.variable))`.
Dialect Differences

- Not available in the -lang qb dialect unless referenced with the alias `__Typeof`.

Differences from QB

- New to FreeBASIC

See also

- `SizeOf`
- `Var`
- `Type (Alias)`
- `Type...End Type`