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
#![ allow( missing_docs ) ]

#[ macro_export ]
macro_rules! _implements
{
  ( $V : expr => $( $Traits : tt )+ ) =>
  {{
    use ::core::marker::PhantomData;

    trait False
    {
      fn get( self : &'_ Self ) -> bool { false }
    }

    impl< T > False
    for &'_ PhantomData< T >
    where T : ?Sized,
    {}

    trait True
    {
      fn get( self : &'_ Self ) -> bool { true }
    }

    impl< T > True
    for PhantomData< T >
    where T : $( $Traits )+ + ?Sized,
    {}

    fn does< T : Sized >( _ : &T ) -> PhantomData< T >
    {
      PhantomData
    }
    ( &does( &$V ) ).get()

  }}
}