@@ -78,8 +78,9 @@ $(H2 $(LNAME2 template_instantiation, Template Instantiation))
78
78
79
79
$(H3 $(LNAME2 explicit_tmp_instantiation, Explicit Template Instantiation))
80
80
81
- $(P Templates are explicitly instantiated with:
82
- )
81
+ $(P Templates are explicitly instantiated using a `!` after the
82
+ template name, then either an argument list or a single token
83
+ argument.)
83
84
84
85
$(GRAMMAR
85
86
$(GNAME TemplateInstance):
@@ -94,6 +95,24 @@ $(GNAME TemplateArgumentList):
94
95
$(GLINK TemplateArgument) $(D ,)
95
96
$(GLINK TemplateArgument) $(D ,) $(GSELF TemplateArgumentList)
96
97
98
+ $(GNAME TemplateSingleArgument):
99
+ $(GLINK_LEX Identifier)
100
+ $(GLINK2 type, FundamentalType)
101
+ $(GLINK_LEX CharacterLiteral)
102
+ $(GLINK_LEX StringLiteral)
103
+ $(GLINK_LEX IntegerLiteral)
104
+ $(GLINK_LEX FloatLiteral)
105
+ $(D true)
106
+ $(D false)
107
+ $(D null)
108
+ $(D this)
109
+ $(GLINK2 expression, SpecialKeyword)
110
+ )
111
+
112
+ $(P A template argument can be a type, compile-time expression
113
+ or a symbol.)
114
+
115
+ $(GRAMMAR
97
116
$(GNAME TemplateArgument):
98
117
$(GLINK2 type, Type)
99
118
$(ASSIGNEXPRESSION)
@@ -108,19 +127,6 @@ $(GNAME SymbolTail):
108
127
$(GLINK_LEX Identifier) $(D .) $(GSELF SymbolTail)
109
128
$(GLINK TemplateInstance)
110
129
$(GLINK TemplateInstance) $(D .) $(GSELF SymbolTail)
111
-
112
- $(GNAME TemplateSingleArgument):
113
- $(GLINK_LEX Identifier)
114
- $(GLINK2 type, FundamentalType)
115
- $(GLINK_LEX CharacterLiteral)
116
- $(GLINK_LEX StringLiteral)
117
- $(GLINK_LEX IntegerLiteral)
118
- $(GLINK_LEX FloatLiteral)
119
- $(D true)
120
- $(D false)
121
- $(D null)
122
- $(D this)
123
- $(GLINK2 expression, SpecialKeyword)
124
130
)
125
131
126
132
$(P Once instantiated, the declarations inside the template, called
0 commit comments