[temp.arg.type]

# 13 Templates [[temp]](./#temp)

## 13.4 Template arguments [[temp.arg]](temp.arg#type)

### 13.4.2 Type template arguments [temp.arg.type]

[1](#1)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/templates.tex#L1199)

A[*template-argument*](temp.names#nt:template-argument "13.3 Names of template specializations [temp.names]") for a type template parameter
shall be a[*type-id*](dcl.name#nt:type-id "9.3.2 Type names [dcl.name]")[.](#1.sentence-1)

[2](#2)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/templates.tex#L1206)

[*Example [1](#example-1)*: template <class T> class X { };template <class T> void f(T t) { }struct { } unnamed_obj;

void f() {struct A { }; enum { e1 }; typedef struct { } B;
 B b;
 X<A> x1; // OK X<A*> x2; // OK X<B> x3; // OK f(e1); // OK f(unnamed_obj); // OK f(b); // OK} â *end example*]

[*Note [1](#note-1)*:

A template type argument can be an incomplete type ([[basic.types.general]](basic.types.general#term.incomplete.type "6.9.1 General"))[.](#2.sentence-1)

â *end note*]
