Environment config reader with typed validation
C++
#include <charconv>
#include <cstdlib>
#include <stdexcept>
#include <string>
std::string env(const char* key, const std::string& fallback = "") {
const char* v = std::getenv(key);
return (v && *v) ? std::string(v) : fallback;
}
int envInt(const char* key, int fallback, int min, int max) {
std::string raw = env(key);
if (raw.empty()) return fallback;
int value = 0;
auto [ptr, ec] = std::from_chars(raw.data(), raw.data() + raw.size(), value);
if (ec != std::errc() || ptr != raw.data() + raw.size() || value < min || value > max)
throw std::runtime_error(std::string("invalid value for ") + key + ": " + raw);
return value;
}