Cast

Converts an expression to a specified data type

Syntax
	Cast( DataTypedatatype, expression )

Parameters
	datatype 
		a built-in data type (standard type)
	expression 
		a variable of another built-in data type

Description
	Converts expression into a different DataTypedatatype. Useful to be used in 
	macros when DataTypedatatype is unknown and also when converting to KeyPgTypeAliasType Alias.

	This is a general form of conversion operators such as KeyPgCintCInt or KeyPgCdblCDbl.
	Cast is more versatile because it can be used on built-in types that 
	have a built-in KeyPgOperatorCast Operator, but don't have a built-in keyword for it: 
	e.g. Cast( Byte, boolean ).
	It is also suitable for use in cases where the type of a variable is not 
	fixed in the code - for example, it might be KeyPgPpdefineDefined earlier, or may be 
	the KeyPgTypeofType Of a different variable or expression.

	Note: If you want to use an operator specifically for converting to 
	different types of KeyPgPtrPointers, consider using KeyPgCptrCPtr instead.

	Upcasting: In an inheritance structure, the upcasting is converting a 
	derived type reference or pointer into a base type.
	In this special use, Cast applied on a derived-type instance (expression
	) can be used to return a base-type (datatype) reference.

	By using a member KeyPgOpCastOperator Cast, Cast can be overloaded for a user 
	defined type expression.
  
Example
	'' will print -128 because the integer literal will be converted to a signed Byte
	'' (this Casting operation is equivalent to using CByte)
	Print Cast( Byte, &h0080 )

	'' will print 3 because the floating-point value will be converted to an Integer
	'' (this Casting operator is equivalent to using CInt)
	Print Cast( Integer, 3.1 )

	Sleep

	'' macro sizeofDerefPtr(): returns the size of the dereferenced pointer
	#define sizeofDerefPtr(ptrToDeref) SizeOf(*Cast(TypeOf(ptrToDeref), 0))

	'' macro typeofDerefPtr(): returns the type of the dereferenced pointer
	#define typeofDerefPtr(ptrToDeref) TypeOf(*Cast(TypeOf(ptrToDeref), 0))

	' Allocate dynamically memory for a Double by New
	Dim As Double Ptr pd
	pd = New typeofDerefPtr(pd)
	*pd = 3.14159
	Print *pd

	' Allocate dynamically memory for a Zstring*10 by Callocate
	Dim As ZString Ptr pz
	pz = CAllocate(10, sizeofDerefPtr(pz))
	*pz = "FreeBASIC"
	Print *pz

	Sleep
	Delete pd
	Deallocate(pz)

Dialect Differences
	* Not available in the CompilerOptlang-lang qb dialect unless referenced with the 
	  alias __Cast.

Differences from QB
	* New to FreeBASIC

See also
	* KeyPgOpCastCast (Operator)
	* KeyPgCptrCPtr
	* KeyPgCintCInt
	* KeyPgTypeofTypeOf
	* ProPgDataConversionCoercion and Conversion
	 
