Parametricity, or Comptime is Bonkers

54 points by soareschen


invlpg

A little bit bit facetious, but...

use std::any::type_name;
use std::mem;

fn mystery<T>(a: T) -> T {
    match type_name::<T>() {
        "i32" => {
            let int: i32 = unsafe { mem::transmute_copy(&a) };
            unsafe { mem::transmute_copy(&(int + 1)) }
        }
        "bool" => {
            let b: bool = unsafe { mem::transmute_copy(&a) };
            unsafe { mem::transmute_copy(&!b) }
        }
        _ => a
    }
}

pub fn main() -> () {
    println!("{}", mystery(1.0));
    println!("{}", mystery(42));
    println!("{}", mystery(true));
}