@@ -1150,20 +1150,23 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
1150
1150
}
1151
1151
1152
1152
fn visit_generics ( & mut self , generics : & ' a Generics ) {
1153
- let mut prev_ty_default = None ;
1153
+ let cg_defaults = self . session . features_untracked ( ) . const_generics_defaults ;
1154
+
1155
+ let mut prev_param_default = None ;
1154
1156
for param in & generics. params {
1155
1157
match param. kind {
1156
1158
GenericParamKind :: Lifetime => ( ) ,
1157
- GenericParamKind :: Type { default : Some ( _) , .. } => {
1158
- prev_ty_default = Some ( param. ident . span ) ;
1159
+ GenericParamKind :: Type { default : Some ( _) , .. }
1160
+ | GenericParamKind :: Const { default : Some ( _) , .. } => {
1161
+ prev_param_default = Some ( param. ident . span ) ;
1159
1162
}
1160
1163
GenericParamKind :: Type { .. } | GenericParamKind :: Const { .. } => {
1161
- if let Some ( span) = prev_ty_default {
1164
+ if let Some ( span) = prev_param_default {
1162
1165
let mut err = self . err_handler ( ) . struct_span_err (
1163
1166
span,
1164
- "type parameters with a default must be trailing" ,
1167
+ "generic parameters with a default must be trailing" ,
1165
1168
) ;
1166
- if matches ! ( param. kind, GenericParamKind :: Const { .. } ) {
1169
+ if matches ! ( param. kind, GenericParamKind :: Const { .. } ) && !cg_defaults {
1167
1170
err. note (
1168
1171
"using type defaults and const parameters \
1169
1172
in the same parameter list is currently not permitted",
@@ -1174,17 +1177,6 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
1174
1177
}
1175
1178
}
1176
1179
}
1177
- if !self . session . features_untracked ( ) . const_generics_defaults {
1178
- if let GenericParamKind :: Const { default : Some ( ref default) , .. } = param. kind {
1179
- let mut err = self . err_handler ( ) . struct_span_err (
1180
- default. value . span ,
1181
- "default values for const generic parameters are unstable" ,
1182
- ) ;
1183
- err. help ( "add `#![feature(const_generic_defaults)]` to the crate attributes to enable" ) ;
1184
- err. emit ( ) ;
1185
- break ;
1186
- }
1187
- }
1188
1180
}
1189
1181
1190
1182
validate_generic_param_order (
0 commit comments