Перенос предложения: голоса +21, -0
Автор идеи:Андрей Руссков
Добавить модуль с набором constexpr-переменных, зависящих от флагов компиляции
Ни для кого не секрет, что как только поведение программы начинает зависеть от компилятора и системы сборки, начинается макросный ад. По сути, каждый пишет свои костыли для одного и того же.
Предлагаю решение: простой модуль, в котором будет собран набор constexpr переменных/consteval функций, зависящих от всего этого внешнего безобразия и не транслирующий никакие из этих макросов наружу. По сути, упростит написание переносимых библиотек, в т.ч. и стандартной
enum class build_type_t {
release,
debug,
profile,
// ...
};
constexpr auto build_type = build_type_t::release/**/;
constexpr string_view toolchain_name = "gcc"/**/;
struct toolchain_version_t {
size_t major;
size_t minor;
size_t bugfix;
// ...
};
constexpr toolchain_version_t toolchain_version { 9, 3, 1 /**/ };
consteval bool supports_standard(string_view revision) {
constexpr unordered_set<string_view> revisions = {
"c++98",
"c++03",
"c++0x",
"c++11",
"c++0y",
"c++14",
"c++20",
// ...
};
// Рано или поздно constexpr контейнеры всё равно заедут,
// как и contains, но можно написать через if constexpr
return revisions.contains(revision);
}
consteval bool supports_feature(string_view feature) {
constexpr unordered_set<string_view> features = {
"concepts",
"contracts",
// ...
};
return features.contains(feature);
}
consteval bool supports_architecture(/*...*/) { ...
Перенос предложения: голоса +21, -0 Автор идеи: Андрей Руссков
Добавить модуль с набором constexpr-переменных, зависящих от флагов компиляции
Ни для кого не секрет, что как только поведение программы начинает зависеть от компилятора и системы сборки, начинается макросный ад. По сути, каждый пишет свои костыли для одного и того же.
Предлагаю решение: простой модуль, в котором будет собран набор constexpr переменных/consteval функций, зависящих от всего этого внешнего безобразия и не транслирующий никакие из этих макросов наружу. По сути, упростит написание переносимых библиотек, в т.ч. и стандартной
ну и так далее по аналогии.