▁a ▁linker ▁that ▁is ▁not ▁C ++ - aware , ▁or ▁when ▁attempting ▁to ▁use ▁templates ▁across ▁shared ▁library ▁boundaries . ▁Most ▁modern ▁comp ilers ▁however ▁now ▁have ▁fairly ▁robust ▁and ▁standard ▁template ▁support , ▁and ▁the ▁new ▁C ++ ▁standard , ▁C ++ 1 1 , ▁further ▁addresses ▁these ▁issues . ▁ ▁Al most ▁all ▁comp ilers ▁produce ▁confusing , ▁long , ▁or ▁sometimes ▁un help ful ▁error ▁messages ▁when ▁errors ▁are ▁detected ▁in ▁code ▁that ▁uses ▁templates . ▁This ▁can ▁make ▁templates ▁difficult ▁to ▁develop . ▁ ▁Finally , ▁the ▁use ▁of ▁templates ▁requires ▁the ▁compiler ▁to ▁generate ▁a ▁separate ▁instance ▁of ▁the ▁tem pl ated ▁class ▁or ▁function ▁for ▁every ▁permut ation ▁of ▁type ▁parameters ▁used ▁with ▁it . ▁( This ▁is ▁necessary ▁because ▁types ▁in ▁C ++ ▁are ▁not ▁all ▁the ▁same ▁size , ▁and ▁the ▁sizes ▁of ▁data ▁fields ▁are ▁important ▁to ▁how ▁classes ▁work .) ▁So ▁the ▁ind isc rim inate ▁use ▁of ▁templates ▁can ▁lead ▁to ▁code ▁b loat , ▁resulting ▁in ▁excess ively ▁large ▁execut ables . ▁However , ▁jud icious ▁use ▁of ▁template ▁special ization ▁and ▁deriv ation ▁can ▁dram atically ▁reduce ▁such ▁code ▁b loat ▁in ▁some ▁cases : ▁ ▁The ▁extra ▁instanti ations ▁generated ▁by ▁templates ▁can ▁also ▁cause ▁debug gers ▁to ▁have ▁difficulty ▁working ▁grace fully ▁with ▁templates . ▁For ▁example , ▁setting ▁a ▁debug ▁break point ▁within ▁a ▁template ▁from ▁a ▁source ▁file ▁may ▁either ▁miss ▁setting ▁the ▁break point ▁in ▁the ▁actual ▁instanti ation ▁desired ▁or ▁may ▁set ▁a