: random_engine(static_cast<uint_fast32_t>(seed)),
          distribution(value_min, value_max)
    {
    }
    template <typename U>
    U operator()(U)
    {
        return static_cast<U>(distribution(random_engine));
    }
private:
    std::default_random_engine random_engine;
    uniform_distribution<T> distribution;
};
auto RandomishGenerator = [](auto i)
{
    using T = decltype(i);
    double sin_value = sin(static_cast<double>(i * i)) * i;
    if (sin_value < std::numeric_limits<T>::lowest() || sin_value > static_cast<double>(std::numeric_limits<T>::max()))
        return T{};
    return T(sin_value);
};
auto MinMaxGenerator = []()