warning: unused return value of `need_to_use_this_value` that must be used
  --> $DIR/fn_must_use.rs:55:5
   |
LL |     need_to_use_this_value();
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
   |
note: the lint level is defined here
  --> $DIR/fn_must_use.rs:3:9
   |
LL | #![warn(unused_must_use)]
   |         ^^^^^^^^^^^^^^^
   = note: it's important

warning: unused return value of `MyStruct::need_to_use_this_method_value` that must be used
  --> $DIR/fn_must_use.rs:60:5
   |
LL |     m.need_to_use_this_method_value();
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

warning: unused return value of `EvenNature::is_even` that must be used
  --> $DIR/fn_must_use.rs:61:5
   |
LL |     m.is_even(); // trait method!
   |     ^^^^^^^^^^^^
   |
   = note: no side effects

warning: unused return value of `MyStruct::need_to_use_this_associated_function_value` that must be used
  --> $DIR/fn_must_use.rs:64:5
   |
LL |     MyStruct::need_to_use_this_associated_function_value();
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

warning: unused return value of `std::cmp::PartialEq::eq` that must be used
  --> $DIR/fn_must_use.rs:70:5
   |
LL |     2.eq(&3);
   |     ^^^^^^^^^

warning: unused return value of `std::cmp::PartialEq::eq` that must be used
  --> $DIR/fn_must_use.rs:71:5
   |
LL |     m.eq(&n);
   |     ^^^^^^^^^

warning: unused comparison that must be used
  --> $DIR/fn_must_use.rs:74:5
   |
LL |     2 == 3;
   |     ^^^^^^

warning: unused comparison that must be used
  --> $DIR/fn_must_use.rs:75:5
   |
LL |     m == n;
   |     ^^^^^^

warning: 8 warnings emitted

