add feature flag for type_changing_struct_update
This commit is contained in:
parent
1ddd4e6d7e
commit
7d7ebf8805
4 changed files with 43 additions and 0 deletions
|
@ -681,6 +681,10 @@ declare_features! (
|
||||||
/// Allows using the `non_exhaustive_omitted_patterns` lint.
|
/// Allows using the `non_exhaustive_omitted_patterns` lint.
|
||||||
(active, non_exhaustive_omitted_patterns_lint, "1.57.0", Some(89554), None),
|
(active, non_exhaustive_omitted_patterns_lint, "1.57.0", Some(89554), None),
|
||||||
|
|
||||||
|
/// Allows creation of instances of a struct by moving fields that have
|
||||||
|
/// not changed from prior instances of the same struct (RFC #2528)
|
||||||
|
(incomplete, type_changing_struct_update, "1.58.0", Some(86555), None),
|
||||||
|
|
||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
// feature-group-end: actual feature gates
|
// feature-group-end: actual feature gates
|
||||||
// -------------------------------------------------------------------------
|
// -------------------------------------------------------------------------
|
||||||
|
|
|
@ -1335,6 +1335,7 @@ symbols! {
|
||||||
type_alias_enum_variants,
|
type_alias_enum_variants,
|
||||||
type_alias_impl_trait,
|
type_alias_impl_trait,
|
||||||
type_ascription,
|
type_ascription,
|
||||||
|
type_changing_struct_update,
|
||||||
type_id,
|
type_id,
|
||||||
type_length_limit,
|
type_length_limit,
|
||||||
type_macros,
|
type_macros,
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
#[derive(Debug)]
|
||||||
|
struct Machine<S> {
|
||||||
|
state: S,
|
||||||
|
common_field1: &'static str,
|
||||||
|
common_field2: i32,
|
||||||
|
}
|
||||||
|
#[derive(Debug)]
|
||||||
|
struct State1;
|
||||||
|
#[derive(Debug, PartialEq)]
|
||||||
|
struct State2;
|
||||||
|
|
||||||
|
fn update_to_state2() {
|
||||||
|
let m1: Machine<State1> = Machine {
|
||||||
|
state: State1,
|
||||||
|
common_field1: "hello",
|
||||||
|
common_field2: 2,
|
||||||
|
};
|
||||||
|
let m2: Machine<State2> = Machine {
|
||||||
|
state: State2,
|
||||||
|
..m1 //~ ERROR mismatched types
|
||||||
|
};
|
||||||
|
// FIXME: this should trigger feature gate
|
||||||
|
assert_eq!(State2, m2.state);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
|
@ -0,0 +1,12 @@
|
||||||
|
error[E0308]: mismatched types
|
||||||
|
--> $DIR/feature-gate-type_changing_struct_update.rs:20:11
|
||||||
|
|
|
||||||
|
LL | ..m1
|
||||||
|
| ^^ expected struct `State2`, found struct `State1`
|
||||||
|
|
|
||||||
|
= note: expected struct `Machine<State2>`
|
||||||
|
found struct `Machine<State1>`
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0308`.
|
Loading…
Add table
Add a link
Reference in a new issue