From 84765c50527d4fa3ada4e947838928ed8a4fe484 Mon Sep 17 00:00:00 2001 From: David Capello Date: Thu, 5 Jan 2023 10:21:50 -0300 Subject: [PATCH] Add several notes related to macOS 10.9 limitations --- docs/CODING_STYLE.md | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/docs/CODING_STYLE.md b/docs/CODING_STYLE.md index bf89e058b..5f403994e 100644 --- a/docs/CODING_STYLE.md +++ b/docs/CODING_STYLE.md @@ -132,19 +132,26 @@ protected: ## C++17 -We are using C++17 standard. You can safely use: +We are using C++17 standard. Some things cannot be used because we're +targetting macOS 10.9, some notes are added about this: * Use `nullptr` instead of `NULL` macro * Use `auto` for complex types, iterators, or when the variable type is obvious (e.g. `auto s = new Sprite;`) * Use range-based for loops (`for (const auto& item : values) { ... }`) * Use template alias (`template alias = orig;`) -* Use non-generic lambda functions +* Use generic lambda functions * Use `std::shared_ptr`, `std::unique_ptr`, or `base::Ref` * Use `std::clamp` -* Use `std::optional` - * Use `std::optional::operator*` (because `std::optional::value` isn't - available on macOS 10.9, only since 10.13) +* Use `std::optional` but taking care of some limitations from macOS 10.9: + * Use `std::optional::has_value()` instead of `std::optional::operator bool()` ([example](https://github.com/aseprite/laf/commit/81622fcbb9e4a0edc14a02250c387bd6fa878708)) + * Use `std::optional::operator*()` instead of `std::optional::value()` ([example](https://github.com/aseprite/aseprite/commit/4471dab289cdd45762155ce0b16472e95a7f8642)) +* Use `std::variant` but taking care of some limitations from macOS 10.9: + * Use `T* p = std::get_if(&value)` instead of `T v = std::get(value)` or + create an auxiliary `get_value()` using `std::get_if` function ([example](https://github.com/aseprite/aseprite/commit/dc0e57728ae2b10cd8365ff0a50263daa8fcc9ac#diff-a59e14240d83bffc2ea917d7ddd7b2762576b0e9ab49bf823ba1a89c653ff978R98)) + * Don't use `std::visit()`, use some alternative with switch-case and the `std::variant::index()` ([example](https://github.com/aseprite/aseprite/commit/574f58375332bb80ce5572fdedb1028617786e45)) +* Use `std::any` but taking care of some limitations from macOS 10.9: + * Use `T* p = std::any_cast(&value)` instead of `T v = std::any_cast(value)` ([example](https://github.com/aseprite/aseprite/commit/c8d4c60f07df27590381ef28001a40f8f785f50e)) * Use `static constexpr T v = ...;` * You can use ``, ``, ``, and `` * Prefer `using T = ...;` instead of `typedef ... T`