, ▁in ▁most ▁implementations ▁of ▁C ▁the ▁signed ▁char ▁has ▁range ▁- 1 2 8 ▁to ▁ 1 2 7 ▁and ▁the ▁unsigned ▁char ▁has ▁range ▁ 0 ▁to ▁ 2 5 5 , ▁so ▁the ▁intersection ▁type ▁of ▁these ▁two ▁types ▁would ▁have ▁range ▁ 0 ▁to ▁ 1 2 7 . ▁Such ▁an ▁intersection ▁type ▁could ▁be ▁safely ▁passed ▁into ▁functions ▁expecting ▁either ▁signed ▁or ▁unsigned ▁chars , ▁because ▁it ▁is ▁compatible ▁with ▁both ▁types . ▁ ▁Inter section ▁types ▁are ▁useful ▁for ▁describing ▁over loaded ▁function ▁types : ▁for ▁example , ▁if ▁" ▁→ ▁" ▁is ▁the ▁type ▁of ▁functions ▁taking ▁an ▁integer ▁argument ▁and ▁returning ▁an ▁integer , ▁and ▁" ▁→ ▁" ▁is ▁the ▁type ▁of ▁functions ▁taking ▁a ▁float ▁argument ▁and ▁returning ▁a ▁float , ▁then ▁the ▁intersection ▁of ▁these ▁two ▁types ▁can ▁be ▁used ▁to ▁describe ▁functions ▁that ▁do ▁one ▁or ▁the ▁other , ▁based ▁on ▁what ▁type ▁of ▁input ▁they ▁are ▁given . ▁Such ▁a ▁function ▁could ▁be ▁passed ▁into ▁another ▁function ▁expecting ▁an ▁" ▁→ ▁" ▁function ▁safely ; ▁it ▁simply ▁would ▁not ▁use ▁the ▁" ▁→ ▁" ▁functionality . ▁ ▁In ▁a ▁subclass ing ▁hierarchy , ▁the ▁intersection ▁of ▁a ▁type ▁and ▁an ▁ancest or ▁type ▁( such ▁as ▁its ▁parent ) ▁is ▁the ▁most ▁derived ▁type . ▁The ▁intersection ▁of ▁sib ling ▁types ▁is ▁empty . ▁ ▁The ▁F ors y the ▁language ▁includes ▁a ▁general ▁implementation ▁of ▁intersection ▁types . ▁A ▁restricted ▁form ▁is ▁ref in ement ▁types . ▁ ▁Union ▁types