@@ -533,63 +533,73 @@ declare_features! (
533
533
) ;
534
534
535
535
declare_features ! (
536
- ( accepted, associated_types, "1.0.0" , None , None ) ,
537
- // Allows overloading augmented assignment operations like `a += b`.
538
- ( accepted, augmented_assignments, "1.8.0" , Some ( 28235 ) , None ) ,
539
- // Allows empty structs and enum variants with braces.
540
- ( accepted, braced_empty_structs, "1.8.0" , Some ( 29720 ) , None ) ,
541
- // Allows indexing into constant arrays.
542
- ( accepted, const_indexing, "1.26.0" , Some ( 29947 ) , None ) ,
543
- ( accepted, default_type_params, "1.0.0" , None , None ) ,
544
- ( accepted, globs, "1.0.0" , None , None ) ,
545
- ( accepted, if_let, "1.0.0" , None , None ) ,
546
536
// A temporary feature gate used to enable parser extensions needed
547
537
// to bootstrap fix for #5723.
548
538
( accepted, issue_5723_bootstrap, "1.0.0" , None , None ) ,
539
+ // These are used to test this portion of the compiler,
540
+ // they don't actually mean anything.
541
+ ( accepted, test_accepted_feature, "1.0.0" , None , None ) ,
542
+
543
+ // Allows using associated `type`s in `trait`s.
544
+ ( accepted, associated_types, "1.0.0" , None , None ) ,
545
+ // Allows using assigning a default type to type parameters in algebraic data type definitions.
546
+ ( accepted, default_type_params, "1.0.0" , None , None ) ,
547
+ // FIXME: explain `globs`.
548
+ ( accepted, globs, "1.0.0" , None , None ) ,
549
+ // Allows `macro_rules!` items.
549
550
( accepted, macro_rules, "1.0.0" , None , None ) ,
550
- // Allows using `#![no_std]`.
551
- ( accepted, no_std, "1.6.0" , None , None ) ,
551
+ // Allows use of `&foo[a..b]` as a slicing syntax.
552
552
( accepted, slicing_syntax, "1.0.0" , None , None ) ,
553
+ // Allows struct variants `Foo { baz: u8, .. }` in enums (RFC 418).
553
554
( accepted, struct_variant, "1.0.0" , None , None ) ,
554
- // These are used to test this portion of the compiler, they don't actually
555
- // mean anything.
556
- ( accepted, test_accepted_feature, "1.0.0" , None , None ) ,
555
+ // Allows indexing tuples.
557
556
( accepted, tuple_indexing, "1.0.0" , None , None ) ,
558
- // Allows macros to appear in the type position.
559
- ( accepted, type_macros, "1.13.0" , Some ( 27245 ) , None ) ,
557
+ // Allows the use of `if let` expressions.
558
+ ( accepted, if_let, "1.0.0" , None , None ) ,
559
+ // Allows the use of `while let` expressions.
560
560
( accepted, while_let, "1.0.0" , None , None ) ,
561
+ // Allows using `#![no_std]`.
562
+ ( accepted, no_std, "1.6.0" , None , None ) ,
563
+ // Allows overloading augmented assignment operations like `a += b`.
564
+ ( accepted, augmented_assignments, "1.8.0" , Some ( 28235 ) , None ) ,
565
+ // Allows empty structs and enum variants with braces.
566
+ ( accepted, braced_empty_structs, "1.8.0" , Some ( 29720 ) , None ) ,
561
567
// Allows `#[deprecated]` attribute.
562
568
( accepted, deprecated, "1.9.0" , Some ( 29935 ) , None ) ,
563
- // `expr?`
569
+ // Allows macros to appear in the type position.
570
+ ( accepted, type_macros, "1.13.0" , Some ( 27245 ) , None ) ,
571
+ // Allows use of the postfix `?` operator in expressions.
564
572
( accepted, question_mark, "1.13.0" , Some ( 31436 ) , None ) ,
565
573
// Allows `..` in tuple (struct) patterns.
566
574
( accepted, dotdot_in_tuple_patterns, "1.14.0" , Some ( 33627 ) , None ) ,
575
+ // Allows some increased flexibility in the name resolution rules,
576
+ // especially around globs and shadowing (RFC 1560).
567
577
( accepted, item_like_imports, "1.15.0" , Some ( 35120 ) , None ) ,
568
578
// Allows using `Self` and associated types in struct expressions and patterns.
569
579
( accepted, more_struct_aliases, "1.16.0" , Some ( 37544 ) , None ) ,
570
- // elide `'static` lifetimes in `static`s and `const`s.
580
+ // Allows elision of `'static` lifetimes in `static`s and `const`s.
571
581
( accepted, static_in_const, "1.17.0" , Some ( 35897 ) , None ) ,
572
582
// Allows field shorthands (`x` meaning `x: x`) in struct literal expressions.
573
583
( accepted, field_init_shorthand, "1.17.0" , Some ( 37340 ) , None ) ,
574
584
// Allows the definition recursive static items.
575
585
( accepted, static_recursion, "1.17.0" , Some ( 29719 ) , None ) ,
576
- // `pub(restricted)` visibilities (RFC 1422)
586
+ // Allows `pub(restricted)` visibilities (RFC 1422).
577
587
( accepted, pub_restricted, "1.18.0" , Some ( 32409 ) , None ) ,
578
- // `#![windows_subsystem]`
588
+ // Allows `#![windows_subsystem]`.
579
589
( accepted, windows_subsystem, "1.18.0" , Some ( 37499 ) , None ) ,
580
590
// Allows `break {expr}` with a value inside `loop`s.
581
591
( accepted, loop_break_value, "1.19.0" , Some ( 37339 ) , None ) ,
582
- // Permits numeric fields in struct expressions and patterns.
592
+ // Allows numeric fields in struct expressions and patterns.
583
593
( accepted, relaxed_adts, "1.19.0" , Some ( 35626 ) , None ) ,
584
- // Coerces non capturing closures to function pointers.
594
+ // Allows coercing non capturing closures to function pointers.
585
595
( accepted, closure_to_fn_coercion, "1.19.0" , Some ( 39817 ) , None ) ,
586
596
// Allows attributes on struct literal fields.
587
597
( accepted, struct_field_attributes, "1.20.0" , Some ( 38814 ) , None ) ,
588
598
// Allows the definition of associated constants in `trait` or `impl` blocks.
589
599
( accepted, associated_consts, "1.20.0" , Some ( 29646 ) , None ) ,
590
- // Usage of the `compile_error!` macro.
600
+ // Allows usage of the `compile_error!` macro.
591
601
( accepted, compile_error, "1.20.0" , Some ( 40872 ) , None ) ,
592
- // See rust-lang/rfcs#1414. Allows code like `let x: &'static u32 = &42` to work.
602
+ // Allows code like `let x: &'static u32 = &42` to work (RFC 1414) .
593
603
( accepted, rvalue_static_promotion, "1.21.0" , Some ( 38865 ) , None ) ,
594
604
// Allows `Drop` types in constants (RFC 1440).
595
605
( accepted, drop_types_in_const, "1.22.0" , Some ( 33156 ) , None ) ,
@@ -600,24 +610,27 @@ declare_features! (
600
610
( accepted, repr_align, "1.25.0" , Some ( 33626 ) , None ) ,
601
611
// Allows '|' at beginning of match arms (RFC 1925).
602
612
( accepted, match_beginning_vert, "1.25.0" , Some ( 44101 ) , None ) ,
603
- // Nested groups in `use` (RFC 2128)
613
+ // Allows nested groups in `use` items (RFC 2128).
604
614
( accepted, use_nested_groups, "1.25.0" , Some ( 44494 ) , None ) ,
605
- // `a..=b` and `..=b`
615
+ // Allows indexing into constant arrays.
616
+ ( accepted, const_indexing, "1.26.0" , Some ( 29947 ) , None ) ,
617
+ // Allows using `a..=b` and `..=b` as inclusive range syntaxes.
606
618
( accepted, inclusive_range_syntax, "1.26.0" , Some ( 28237 ) , None ) ,
607
619
// Allows `..=` in patterns (RFC 1192).
608
620
( accepted, dotdoteq_in_patterns, "1.26.0" , Some ( 28237 ) , None ) ,
609
- // Termination trait in main (RFC 1937)
621
+ // Allows `fn main()` with return types which implements `Termination` (RFC 1937).
610
622
( accepted, termination_trait, "1.26.0" , Some ( 43301 ) , None ) ,
611
- // `Copy`/` Clone` closures (RFC 2132).
623
+ // Allows implementing ` Clone` for closures where possible (RFC 2132).
612
624
( accepted, clone_closures, "1.26.0" , Some ( 44490 ) , None ) ,
625
+ // Allows implementing `Copy` for closures where possible (RFC 2132).
613
626
( accepted, copy_closures, "1.26.0" , Some ( 44490 ) , None ) ,
614
627
// Allows `impl Trait` in function arguments.
615
628
( accepted, universal_impl_trait, "1.26.0" , Some ( 34511 ) , None ) ,
616
629
// Allows `impl Trait` in function return types.
617
630
( accepted, conservative_impl_trait, "1.26.0" , Some ( 34511 ) , None ) ,
618
- // The ` i128` type
631
+ // Allows using the `u128` and ` i128` types.
619
632
( accepted, i128_type, "1.26.0" , Some ( 35118 ) , None ) ,
620
- // Default match binding modes (RFC 2005)
633
+ // Allows default match binding modes (RFC 2005).
621
634
( accepted, match_default_bindings, "1.26.0" , Some ( 42640 ) , None ) ,
622
635
// Allows `'_` placeholder lifetimes.
623
636
( accepted, underscore_lifetimes, "1.26.0" , Some ( 44524 ) , None ) ,
@@ -627,21 +640,21 @@ declare_features! (
627
640
( accepted, cfg_target_feature, "1.27.0" , Some ( 29717 ) , None ) ,
628
641
// Allows `#[target_feature(...)]`.
629
642
( accepted, target_feature, "1.27.0" , None , None ) ,
630
- // Trait object syntax with `dyn` prefix
643
+ // Allows using `dyn Trait` as a syntax for trait objects.
631
644
( accepted, dyn_trait, "1.27.0" , Some ( 44662 ) , None ) ,
632
645
// Allows `#[must_use]` on functions, and introduces must-use operators (RFC 1940).
633
646
( accepted, fn_must_use, "1.27.0" , Some ( 43302 ) , None ) ,
634
647
// Allows use of the `:lifetime` macro fragment specifier.
635
648
( accepted, macro_lifetime_matcher, "1.27.0" , Some ( 34303 ) , None ) ,
636
- // Termination trait in tests (RFC 1937)
649
+ // Allows `#[test]` functions where the return type implements `Termination` (RFC 1937).
637
650
( accepted, termination_trait_test, "1.27.0" , Some ( 48854 ) , None ) ,
638
- // The `#[global_allocator]` attribute
651
+ // Allows the `#[global_allocator]` attribute.
639
652
( accepted, global_allocator, "1.28.0" , Some ( 27389 ) , None ) ,
640
653
// Allows `#[repr(transparent)]` attribute on newtype structs.
641
654
( accepted, repr_transparent, "1.28.0" , Some ( 43036 ) , None ) ,
642
- // Procedural macros in `proc-macro` crates
655
+ // Allows procedural macros in `proc-macro` crates.
643
656
( accepted, proc_macro, "1.29.0" , Some ( 38356 ) , None ) ,
644
- // `foo.rs` as an alternative to `foo/mod.rs`
657
+ // Allows `foo.rs` as an alternative to `foo/mod.rs`.
645
658
( accepted, non_modrs_mods, "1.30.0" , Some ( 44660 ) , None ) ,
646
659
// Allows use of the `:vis` macro fragment specifier
647
660
( accepted, macro_vis_matcher, "1.30.0" , Some ( 41022 ) , None ) ,
@@ -650,47 +663,50 @@ declare_features! (
650
663
( accepted, use_extern_macros, "1.30.0" , Some ( 35896 ) , None ) ,
651
664
// Allows keywords to be escaped for use as identifiers.
652
665
( accepted, raw_identifiers, "1.30.0" , Some ( 48589 ) , None ) ,
653
- // Attributes scoped to tools.
666
+ // Allows attributes scoped to tools.
654
667
( accepted, tool_attributes, "1.30.0" , Some ( 44690 ) , None ) ,
655
668
// Allows multi-segment paths in attributes and derives.
656
669
( accepted, proc_macro_path_invoc, "1.30.0" , Some ( 38356 ) , None ) ,
657
670
// Allows all literals in attribute lists and values of key-value pairs.
658
671
( accepted, attr_literals, "1.30.0" , Some ( 34981 ) , None ) ,
659
- // Infer outlives requirements (RFC 2093).
672
+ // Allows inferring outlives requirements (RFC 2093).
660
673
( accepted, infer_outlives_requirements, "1.30.0" , Some ( 44493 ) , None ) ,
674
+ // Allows annotating functions conforming to `fn(&PanicInfo) -> !` with `#[panic_handler]`.
675
+ // This defines the behavior of panics.
661
676
( accepted, panic_handler, "1.30.0" , Some ( 44489 ) , None ) ,
662
- // Used to preserve symbols (see llvm.used).
677
+ // Allows `#[used]` to preserve symbols (see llvm.used).
663
678
( accepted, used, "1.30.0" , Some ( 40289 ) , None ) ,
664
- // `crate` in paths
679
+ // Allows `crate` in paths.
665
680
( accepted, crate_in_paths, "1.30.0" , Some ( 45477 ) , None ) ,
666
- // Resolve absolute paths as paths from other crates.
681
+ // Allows resolving absolute paths as paths from other crates.
667
682
( accepted, extern_absolute_paths, "1.30.0" , Some ( 44660 ) , None ) ,
668
- // Access to crate names passed via `--extern` through prelude.
683
+ // Allows access to crate names passed via `--extern` through prelude.
669
684
( accepted, extern_prelude, "1.30.0" , Some ( 44660 ) , None ) ,
670
- // Parentheses in patterns
685
+ // Allows parentheses in patterns.
671
686
( accepted, pattern_parentheses, "1.31.0" , Some ( 51087 ) , None ) ,
672
687
// Allows the definition of `const fn` functions.
673
688
( accepted, min_const_fn, "1.31.0" , Some ( 53555 ) , None ) ,
674
- // Scoped lints
689
+ // Allows scoped lints.
675
690
( accepted, tool_lints, "1.31.0" , Some ( 44690 ) , None ) ,
676
- // `impl<I:Iterator> Iterator for &mut Iterator`
677
- // `impl Debug for Foo<'_>`
691
+ // Allows lifetime elision in `impl` headers. For example:
692
+ // + `impl<I:Iterator> Iterator for &mut Iterator`
693
+ // + `impl Debug for Foo<'_>`
678
694
( accepted, impl_header_lifetime_elision, "1.31.0" , Some ( 15872 ) , None ) ,
679
- // `extern crate foo as bar;` puts `bar` into extern prelude.
695
+ // Allows `extern crate foo as bar;`. This puts `bar` into extern prelude.
680
696
( accepted, extern_crate_item_prelude, "1.31.0" , Some ( 55599 ) , None ) ,
681
697
// Allows use of the `:literal` macro fragment specifier (RFC 1576).
682
698
( accepted, macro_literal_matcher, "1.32.0" , Some ( 35625 ) , None ) ,
683
- // Use `?` as the Kleene "at most one" operator.
699
+ // Allows use of `?` as the Kleene "at most one" operator in macros .
684
700
( accepted, macro_at_most_once_rep, "1.32.0" , Some ( 48075 ) , None ) ,
685
- // `Self` struct constructor (RFC 2302)
701
+ // Allows `Self` struct constructor (RFC 2302).
686
702
( accepted, self_struct_ctor, "1.32.0" , Some ( 51994 ) , None ) ,
687
- // `Self` in type definitions (RFC 2300)
703
+ // Allows `Self` in type definitions (RFC 2300).
688
704
( accepted, self_in_typedefs, "1.32.0" , Some ( 49303 ) , None ) ,
689
705
// Allows `use x::y;` to search `x` in the current scope.
690
706
( accepted, uniform_paths, "1.32.0" , Some ( 53130 ) , None ) ,
691
- // Integer match exhaustiveness checking (RFC 2591)
707
+ // Allows integer match exhaustiveness checking (RFC 2591).
692
708
( accepted, exhaustive_integer_patterns, "1.33.0" , Some ( 50907 ) , None ) ,
693
- // `use path as _;` and `extern crate c as _;`
709
+ // Allows `use path as _;` and `extern crate c as _;`.
694
710
( accepted, underscore_imports, "1.33.0" , Some ( 48216 ) , None ) ,
695
711
// Allows `#[repr(packed(N))]` attribute on structs.
696
712
( accepted, repr_packed, "1.33.0" , Some ( 33158 ) , None ) ,
@@ -702,15 +718,16 @@ declare_features! (
702
718
// As long as control flow is not implemented in const eval, `&&` and `||` may not be used
703
719
// at the same time as let bindings.
704
720
( accepted, const_let, "1.33.0" , Some ( 48821 ) , None ) ,
705
- // `#[cfg_attr(predicate, multiple, attributes, here)]`
721
+ // Allows `#[cfg_attr(predicate, multiple, attributes, here)]`.
706
722
( accepted, cfg_attr_multi, "1.33.0" , Some ( 54881 ) , None ) ,
707
- // Top level or-patterns (`p | q`) in `if let` and `while let`.
723
+ // Allows top level or-patterns (`p | q`) in `if let` and `while let`.
708
724
( accepted, if_while_or_patterns, "1.33.0" , Some ( 48215 ) , None ) ,
709
725
// Allows `cfg(target_vendor = "...")`.
710
726
( accepted, cfg_target_vendor, "1.33.0" , Some ( 29718 ) , None ) ,
711
- // `extern crate self as foo;` puts local crate root into extern prelude under name `foo`.
727
+ // Allows `extern crate self as foo;`.
728
+ // This puts local crate root into extern prelude under name `foo`.
712
729
( accepted, extern_crate_self, "1.34.0" , Some ( 56409 ) , None ) ,
713
- // support for arbitrary delimited token streams in non-macro attributes
730
+ // Allows arbitrary delimited token streams in non-macro attributes.
714
731
( accepted, unrestricted_attribute_tokens, "1.34.0" , Some ( 55208 ) , None ) ,
715
732
) ;
716
733
0 commit comments