File: must_use-trait.rs

package info (click to toggle)
rustc 1.85.0%2Bdfsg3-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental, forky, sid, trixie
  • size: 893,396 kB
  • sloc: xml: 158,127; python: 35,830; javascript: 19,497; cpp: 19,002; sh: 17,245; ansic: 13,127; asm: 4,376; makefile: 1,051; perl: 29; lisp: 29; ruby: 19; sql: 11
file content (39 lines) | stat: -rw-r--r-- 1,060 bytes parent folder | download | duplicates (16)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#![deny(unused_must_use)]

#[must_use]
trait Critical {}

trait NotSoCritical {}

trait DecidedlyUnimportant {}

struct Anon;

impl Critical for Anon {}
impl NotSoCritical for Anon {}
impl DecidedlyUnimportant for Anon {}

fn get_critical() -> impl NotSoCritical + Critical + DecidedlyUnimportant {
    Anon {}
}

fn get_boxed_critical() -> Box<dyn Critical> {
    Box::new(Anon {})
}

fn get_nested_boxed_critical() -> Box<Box<dyn Critical>> {
    Box::new(Box::new(Anon {}))
}

fn get_critical_tuple() -> (u32, Box<dyn Critical>, impl Critical, ()) {
    (0, get_boxed_critical(), get_critical(), ())
}

fn main() {
    get_critical(); //~ ERROR unused implementer of `Critical` that must be used
    get_boxed_critical(); //~ ERROR unused boxed `Critical` trait object that must be used
    get_nested_boxed_critical();
    //~^ ERROR unused boxed boxed `Critical` trait object that must be used
    get_critical_tuple(); //~ ERROR unused boxed `Critical` trait object in tuple element 1
    //~^ ERROR unused implementer of `Critical` in tuple element 2
}