Token bucket limiter with burst capacity

C++
#include <algorithm>
#include <chrono>

class TokenBucket {
public:
    TokenBucket(double ratePerSec, double burst)
        : rate_(ratePerSec), burst_(burst), tokens_(burst), last_(std::chrono::steady_clock::now()) {}
    bool tryAcquire(double cost = 1.0) {
        auto now = std::chrono::steady_clock::now();
        double secs = std::chrono::duration<double>(now - last_).count();
        last_ = now;
        tokens_ = std::min(burst_, tokens_ + secs * rate_);
        if (tokens_ < cost) return false;
        tokens_ -= cost;
        return true;
    }
private:
    double rate_, burst_, tokens_;
    std::chrono::steady_clock::time_point last_;
};