🔧 Guidelines Support Library: как Microsoft проверяет параметры
GSL — это не просто модная библиотека. Это набор практик от создателей C++, упакованный в код😎
#include <gsl/gsl>
// ❌ Традиционная проверка
void setAge(Person& p, int age) {
if (age < 0 || age > 150) {
throw std::invalid_argument("Invalid age");
}
p.age = age;
}
// ✅ GSL: семантика ясна из кода
void setAge(Person& p, int age) {
Expects(age >= 0 && age <= 150); // Precondition
p.age = age;
Ensures(p.age == age); // Postcondition
}
❗️Что даёт GSL:
• Expects() — preconditions (проверка входа)
• Ensures() — postconditions (проверка выхода)
• gsl::not_null<T*> — указатель, который не может быть null
void process(gsl::not_null<int*> data) {
// Компилятор гарантирует: data != nullptr
*data = 42; // Безопасно без if
}
‼️ В debug режиме — runtime проверки, в release — могут быть отключены.
👉 Библиотека