uses c++ 0x style rng