Šablony a překlad
Definice šablon jsou tři typy názvů.
Názvy místně deklarována, včetně názvu samotné šablony a všechny názvy deklarované uvnitř definice šablony.
Názvy z vnějšího oboru mimo definici šablony.
Názvy, které nějakým způsobem, závisí na šabloně argumenty uvedené jako názvy závislé.
Zatímco první dvě jména se týkají také obory třídy a funkce, zvláštní pravidla pro překlad názvů jsou povinni v definicích šablony zabývat přidaného složitost závislé názvy.Je to proto, že kompilátor ví málo o tyto názvy dokud šablona je vytvořena instance, protože by mohly být zcela odlišné typy v závislosti na šablonu, která se používají argumenty.Sobě názvy jsou vyhledávány podle obvyklých pravidel Definice šablony a na jeho místě.Tyto názvy, je nezávislé na argumenty šablony jsou vyhledávány jednou pro všechny šablony specializace.Názvy závislých se hledají není, dokud je vytvořena šablona a jsou vyhledávány odděleně pro každou odbornost.
Typ závisí, pokud je závislý na argumenty šablony.Konkrétně je závislé, pokud je typ:
Argument, samotné šablony:
T
Kvalifikovaný název kvalifikace včetně závislé typu:
T::myType
Kvalifikovaný název, pokud části neúplných identifikuje závislé typu:
N::T
Typ const nebo volatile jehož základní typ je závislé typu:
const T
Ukazatel, referenční, pole nebo typ ukazatel funkce založené na závislé typu:
T *, T &, T [10], T (*)()
Matice, jejíž velikost je založena na parametru šablony:
template <int arg> class X { int x[arg] ; // dependent type }
Typ šablony, vyrobeno z parametru šablony:
T<int>, MyTemplate<T>
Závislost typu a hodnota závislost
Názvy a výrazy, které jsou závislé na parametru šablony jsou rozděleny do kategorií závislé na typu nebo hodnotu závislé v závislosti na tom, zda se jedná o parametr typu nebo parametr hodnota parametru šablony.Také všechny identifikátory deklarovat v šabloně závislé na šablonu argument typu jsou považovány za hodnotu závislé, jako je typ integrál nebo výčet inicializován s závislé na hodnotě výrazu.
Výrazy, které zahrnuje proměnné, které jsou závislé na typu nebo závislé hodnoty jsou závislé na typu a závislé na hodnotě výrazy.Tyto výrazy mohou být sémantiku, který se liší v závislosti na parametry použité šablony.