diff --git a/.clang-format b/.clang-format index 01fb3677..aab677f7 100644 --- a/.clang-format +++ b/.clang-format @@ -4,6 +4,11 @@ Language: Json IndentWidth: 2 UseTab: Never --- +BasedOnStyle: LLVM +Language: JavaScript +IndentWidth: 4 +UseTab: Never +--- Language: Cpp AccessModifierOffset: -2 AlignAfterOpenBracket: Align diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 2b19e029..63057b9f 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -41,4 +41,4 @@ jobs: tool_name: pre-commit level: warning reviewdog_flags: "-fail-level=error" - githubt_token: ${{ secrets.GITHUB_TOKEN }} + github_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/docs/TODO.json b/docs/TODO.json index fac8e31e..a75b63a6 100644 --- a/docs/TODO.json +++ b/docs/TODO.json @@ -1,66 +1,346 @@ { - "allocator.requirements.general": { "code":true, "test":true, "doc":false }, - "execution": { "code":true, "test":true, "doc":true, "comment":"empty" }, - "execution.queries": { "code":true, "test":true, "doc":true, "comment":"empty" }, - "execution.queryable": { "code":true, "test":true, "doc":true, "comment":"empty" }, - "execution.queryable.general]": { "code":true, "test":true, "doc":false, "comment":"nothing testable" }, - "execution.forwarding_query": { "code":true, "test":true, "doc":false }, - "execution.get_allocator": { "code":true, "test":true, "doc":false }, - "execution.get_stop_token": { "code":true, "test":true, "doc":false }, - "execution.environment.get_env": { "code":true, "test":true, "doc":false }, - "execution.get_domain": { "code":true, "test":true, "doc":false }, - "execution.queryable.concepts": { "code":true, "test":true, "doc":false }, - "execution.receivers": { "code":true, "test":true, "doc":true, "comment":"empty" }, - "execution.senders": { "code":true, "test":true, "doc":true, "comment":"empty" }, - "execution.senders.factories": { "code":true, "test":true, "doc":true, "comment":"empty" }, - "execution.senders.adapt": { "code":true, "test":true, "doc":true, "comment":"empty" }, - "execution.senders.consumers": { "code":true, "test":true, "doc":true, "comment":"empty" }, - "execution.snd_rec_utils": { "code":true, "test":true, "doc":true, "comment":"empty" }, - "execution.contexts": { "code":true, "test":true, "doc":true, "comment":"empty" }, - "execution.coro_utils": { "code":true, "test":true, "doc":true, "comment":"empty" }, - "execution.receivers.set_value": { "code":true, "test":true, "doc":false }, - "execution.receivers.set_error": { "code":true, "test":true, "doc":false }, - "execution.receivers.set_stopped": { "code":true, "test":true, "doc":false }, - "execution.opstate.start": { "code":true, "test":true, "doc":false }, - "execution.opstate": { "code":true, "test":true, "doc":false }, - "execution.general": { "code":true, "test":true, "doc":false }, - "except": { "code":true, "test":true, "doc":true, "comment":"empty" }, - "except.special": { "code":true, "test":true, "doc":true, "comment":"empty" }, - "library": { "code":true, "test":true, "doc":true, "comment":"term definition only" }, - "support": { "code":true, "test":true, "doc":true, "comment":"empty" }, - "support.limits": { "code":true, "test":true, "doc":true, "comment":"empty" }, - "utilities": { "code":true, "test":true, "doc":true, "comment":"empty" }, - "function.objects": { "code":true, "test":true, "doc":true, "comment":"empty" }, - "functional.syn": { "code":true, "test":true, "doc":false }, - "thread": { "code":true, "test":true, "doc":true, "comment":"empty" }, - "thread.stoptoken": { "code":true, "test":true, "doc":true, "comment":"empty" }, - "thread.stoptoken.intro": { "code":true, "test":true, "doc":false }, - "thread.stoptoken.syn": { "code":true, "test":true, "doc":false }, - "stoptoken.nonmembers": { "code":true, "test":true, "doc":true, "comment":"removed" }, - "stoptoken.concepts": { "code":true, "test":true, "doc":false }, - "stoptoken": { "code":true, "test":true, "doc":true, "comment":"empty" }, - "stoptoken.cons": { "removed":true }, - "stoptoken.general": { "code":true, "test":true, "doc":false }, - "stoptoken.mem": { "code":true, "test":true, "doc":false }, - "stopsource": { "code":true, "test":true, "doc":true, "comment":"empty" }, - "stopsource.general": { "code":true, "test":true, "doc":false }, - "stopsource.cons": { "code":true, "test":true, "doc":false }, - "stopsource.mem": { "code":true, "test":true, "doc":false }, - "stopsource.nonmembers": { "code":true, "test":true, "doc":true, "comment":"removed" }, - "stopcallback": { "code":true, "test":true, "doc":true, "comment":"empty" }, - "stopcallback.general": { "code":true, "test":true, "doc":false }, - "stopcallback.cons": { "code":true, "test":true, "doc":false }, - "stoptoken.never": { "code":true, "test":true, "doc":true, "comment":"empty" }, - "stoptoken.never.general": { "code":true, "test":true, "doc":false }, - "stoptoken.inplace": { "code":true, "test":true, "doc":true, "comment":"empty" }, - "stoptoken.inplace.general": { "code":true, "test":true, "doc":false }, - "stoptoken.inplace.members": { "code":true, "test":true, "doc":false }, - "stopsource.inplace": { "code":true, "test":true, "doc":true, "comment":"empty" }, - "stopsource.inplace.general": { "code":true, "test":true, "doc":false }, - "stopsource.inplace.cons": { "code":true, "test":true, "doc":false }, - "stopsource.inplace.mem": { "code":true, "test":true, "doc":false }, - "stopcallback.inplace": { "code":true, "test":true, "doc":true, "comment":"empty" }, - "stopcallback.inplace.general": { "code":true, "test":true, "doc":false }, - "stopcallback.inplace.cons": { "code":true, "test":true, "doc":false }, - "": {} + "allocator.requirements.general": { + "code": true, + "test": true, + "doc": false + }, + "execution": { + "code": true, + "test": true, + "doc": true, + "comment": "empty" + }, + "execution.queries": { + "code": true, + "test": true, + "doc": true, + "comment": "empty" + }, + "execution.queryable": { + "code": true, + "test": true, + "doc": true, + "comment": "empty" + }, + "execution.queryable.general]": { + "code": true, + "test": true, + "doc": false, + "comment": "nothing testable" + }, + "execution.forwarding_query": { + "code": true, + "test": true, + "doc": false + }, + "execution.get_allocator": { + "code": true, + "test": true, + "doc": false + }, + "execution.get_stop_token": { + "code": true, + "test": true, + "doc": false + }, + "execution.environment.get_env": { + "code": true, + "test": true, + "doc": false + }, + "execution.get_domain": { + "code": true, + "test": true, + "doc": false + }, + "execution.queryable.concepts": { + "code": true, + "test": true, + "doc": false + }, + "execution.receivers": { + "code": true, + "test": true, + "doc": true, + "comment": "empty" + }, + "execution.senders": { + "code": true, + "test": true, + "doc": true, + "comment": "empty" + }, + "execution.senders.factories": { + "code": true, + "test": true, + "doc": true, + "comment": "empty" + }, + "execution.senders.adapt": { + "code": true, + "test": true, + "doc": true, + "comment": "empty" + }, + "execution.senders.consumers": { + "code": true, + "test": true, + "doc": true, + "comment": "empty" + }, + "execution.snd_rec_utils": { + "code": true, + "test": true, + "doc": true, + "comment": "empty" + }, + "execution.contexts": { + "code": true, + "test": true, + "doc": true, + "comment": "empty" + }, + "execution.coro_utils": { + "code": true, + "test": true, + "doc": true, + "comment": "empty" + }, + "execution.receivers.set_value": { + "code": true, + "test": true, + "doc": false + }, + "execution.receivers.set_error": { + "code": true, + "test": true, + "doc": false + }, + "execution.receivers.set_stopped": { + "code": true, + "test": true, + "doc": false + }, + "execution.opstate.start": { + "code": true, + "test": true, + "doc": false + }, + "execution.opstate": { + "code": true, + "test": true, + "doc": false + }, + "execution.general": { + "code": true, + "test": true, + "doc": false + }, + "except": { + "code": true, + "test": true, + "doc": true, + "comment": "empty" + }, + "except.special": { + "code": true, + "test": true, + "doc": true, + "comment": "empty" + }, + "library": { + "code": true, + "test": true, + "doc": true, + "comment": "term definition only" + }, + "support": { + "code": true, + "test": true, + "doc": true, + "comment": "empty" + }, + "support.limits": { + "code": true, + "test": true, + "doc": true, + "comment": "empty" + }, + "utilities": { + "code": true, + "test": true, + "doc": true, + "comment": "empty" + }, + "function.objects": { + "code": true, + "test": true, + "doc": true, + "comment": "empty" + }, + "functional.syn": { + "code": true, + "test": true, + "doc": false + }, + "thread": { + "code": true, + "test": true, + "doc": true, + "comment": "empty" + }, + "thread.stoptoken": { + "code": true, + "test": true, + "doc": true, + "comment": "empty" + }, + "thread.stoptoken.intro": { + "code": true, + "test": true, + "doc": false + }, + "thread.stoptoken.syn": { + "code": true, + "test": true, + "doc": false + }, + "stoptoken.nonmembers": { + "code": true, + "test": true, + "doc": true, + "comment": "removed" + }, + "stoptoken.concepts": { + "code": true, + "test": true, + "doc": false + }, + "stoptoken": { + "code": true, + "test": true, + "doc": true, + "comment": "empty" + }, + "stoptoken.cons": { + "removed": true + }, + "stoptoken.general": { + "code": true, + "test": true, + "doc": false + }, + "stoptoken.mem": { + "code": true, + "test": true, + "doc": false + }, + "stopsource": { + "code": true, + "test": true, + "doc": true, + "comment": "empty" + }, + "stopsource.general": { + "code": true, + "test": true, + "doc": false + }, + "stopsource.cons": { + "code": true, + "test": true, + "doc": false + }, + "stopsource.mem": { + "code": true, + "test": true, + "doc": false + }, + "stopsource.nonmembers": { + "code": true, + "test": true, + "doc": true, + "comment": "removed" + }, + "stopcallback": { + "code": true, + "test": true, + "doc": true, + "comment": "empty" + }, + "stopcallback.general": { + "code": true, + "test": true, + "doc": false + }, + "stopcallback.cons": { + "code": true, + "test": true, + "doc": false + }, + "stoptoken.never": { + "code": true, + "test": true, + "doc": true, + "comment": "empty" + }, + "stoptoken.never.general": { + "code": true, + "test": true, + "doc": false + }, + "stoptoken.inplace": { + "code": true, + "test": true, + "doc": true, + "comment": "empty" + }, + "stoptoken.inplace.general": { + "code": true, + "test": true, + "doc": false + }, + "stoptoken.inplace.members": { + "code": true, + "test": true, + "doc": false + }, + "stopsource.inplace": { + "code": true, + "test": true, + "doc": true, + "comment": "empty" + }, + "stopsource.inplace.general": { + "code": true, + "test": true, + "doc": false + }, + "stopsource.inplace.cons": { + "code": true, + "test": true, + "doc": false + }, + "stopsource.inplace.mem": { + "code": true, + "test": true, + "doc": false + }, + "stopcallback.inplace": { + "code": true, + "test": true, + "doc": true, + "comment": "empty" + }, + "stopcallback.inplace.general": { + "code": true, + "test": true, + "doc": false + }, + "stopcallback.inplace.cons": { + "code": true, + "test": true, + "doc": false + }, + "": {} } diff --git a/docs/doxygen-awesome-darkmode-toggle.js b/docs/doxygen-awesome-darkmode-toggle.js index 9c5875d5..5fe8cc70 100644 --- a/docs/doxygen-awesome-darkmode-toggle.js +++ b/docs/doxygen-awesome-darkmode-toggle.js @@ -31,51 +31,60 @@ class DoxygenAwesomeDarkModeToggle extends HTMLElement { // SVG icons from https://fonts.google.com/icons // Licensed under the Apache 2.0 license: // https://www.apache.org/licenses/LICENSE-2.0.html - static lightModeIcon = `` - static darkModeIcon = `` - static title = "Toggle Light/Dark Mode" - - static prefersLightModeInDarkModeKey = "prefers-light-mode-in-dark-mode" - static prefersDarkModeInLightModeKey = "prefers-dark-mode-in-light-mode" - - static _staticConstructor = function () { - DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.userPreference) - // Update the color scheme when the browsers preference changes - // without user interaction on the website. - window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => { - DoxygenAwesomeDarkModeToggle.onSystemPreferenceChanged() - }) - // Update the color scheme when the tab is made visible again. - // It is possible that the appearance was changed in another tab - // while this tab was in the background. - document.addEventListener("visibilitychange", visibilityState => { - if (document.visibilityState === 'visible') { - DoxygenAwesomeDarkModeToggle.onSystemPreferenceChanged() - } - }); - }() - - static init() { - $(function () { - $(document).ready(function () { - const toggleButton = document.createElement('doxygen-awesome-dark-mode-toggle') + static lightModeIcon = + `` static darkModeIcon = + `` static title = + "Toggle Light/Dark Mode" + + static prefersLightModeInDarkModeKey = + "prefers-light-mode-in-dark-mode" static prefersDarkModeInLightModeKey = + "prefers-dark-mode-in-light-mode" + + static _staticConstructor = + function() { + DoxygenAwesomeDarkModeToggle.enableDarkMode( + DoxygenAwesomeDarkModeToggle.userPreference) + // Update the color scheme when the browsers preference changes + // without user interaction on the website. + window.matchMedia('(prefers-color-scheme: dark)') + .addEventListener('change', + event => {DoxygenAwesomeDarkModeToggle + .onSystemPreferenceChanged()}) + // Update the color scheme when the tab is made visible again. + // It is possible that the appearance was changed in another tab + // while this tab was in the background. + document.addEventListener("visibilitychange", visibilityState => { + if (document.visibilityState === 'visible') { + DoxygenAwesomeDarkModeToggle.onSystemPreferenceChanged() + } + }); + }() + + static init() { + $(function() { + $(document).ready(function() { + const toggleButton = + document.createElement('doxygen-awesome-dark-mode-toggle') toggleButton.title = DoxygenAwesomeDarkModeToggle.title toggleButton.updateIcon() - window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => { - toggleButton.updateIcon() + window.matchMedia('(prefers-color-scheme: dark)') + .addEventListener('change', + event => {toggleButton.updateIcon()}) + document.addEventListener( + "visibilitychange", visibilityState => { + if (document.visibilityState === 'visible') { + toggleButton.updateIcon() + } + }); + + $(document).ready(function() { + document.getElementById("MSearchBox") + .parentNode.appendChild(toggleButton) }) - document.addEventListener("visibilitychange", visibilityState => { - if (document.visibilityState === 'visible') { - toggleButton.updateIcon() - } - }); - - $(document).ready(function () { - document.getElementById("MSearchBox").parentNode.appendChild(toggleButton) - }) - $(window).resize(function () { - document.getElementById("MSearchBox").parentNode.appendChild(toggleButton) + $(window).resize(function() { + document.getElementById("MSearchBox") + .parentNode.appendChild(toggleButton) }) }) }) @@ -97,23 +106,34 @@ class DoxygenAwesomeDarkModeToggle extends HTMLElement { * @returns `true` for dark-mode, `false` for light-mode user preference */ static get userPreference() { - return (!DoxygenAwesomeDarkModeToggle.systemPreference && localStorage.getItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey)) || - (DoxygenAwesomeDarkModeToggle.systemPreference && !localStorage.getItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey)) + return (!DoxygenAwesomeDarkModeToggle.systemPreference && + localStorage.getItem(DoxygenAwesomeDarkModeToggle + .prefersDarkModeInLightModeKey)) || + (DoxygenAwesomeDarkModeToggle.systemPreference && + !localStorage.getItem( + DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey)) } static set userPreference(userPreference) { DoxygenAwesomeDarkModeToggle.darkModeEnabled = userPreference if (!userPreference) { if (DoxygenAwesomeDarkModeToggle.systemPreference) { - localStorage.setItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey, true) + localStorage.setItem( + DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey, + true) } else { - localStorage.removeItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey) + localStorage.removeItem( + DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey) } - } else { + } + else { if (!DoxygenAwesomeDarkModeToggle.systemPreference) { - localStorage.setItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey, true) + localStorage.setItem( + DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey, + true) } else { - localStorage.removeItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey) + localStorage.removeItem( + DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey) } } DoxygenAwesomeDarkModeToggle.onUserPreferenceChanged() @@ -132,17 +152,20 @@ class DoxygenAwesomeDarkModeToggle extends HTMLElement { } static onSystemPreferenceChanged() { - DoxygenAwesomeDarkModeToggle.darkModeEnabled = DoxygenAwesomeDarkModeToggle.userPreference - DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.darkModeEnabled) + DoxygenAwesomeDarkModeToggle.darkModeEnabled = + DoxygenAwesomeDarkModeToggle.userPreference + DoxygenAwesomeDarkModeToggle.enableDarkMode( + DoxygenAwesomeDarkModeToggle.darkModeEnabled) } static onUserPreferenceChanged() { - DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.darkModeEnabled) + DoxygenAwesomeDarkModeToggle.enableDarkMode( + DoxygenAwesomeDarkModeToggle.darkModeEnabled) } toggleDarkMode() { - DoxygenAwesomeDarkModeToggle.userPreference = !DoxygenAwesomeDarkModeToggle.userPreference - this.updateIcon() + DoxygenAwesomeDarkModeToggle.userPreference = + !DoxygenAwesomeDarkModeToggle.userPreference this.updateIcon() } updateIcon() { @@ -154,4 +177,5 @@ class DoxygenAwesomeDarkModeToggle extends HTMLElement { } } -customElements.define("doxygen-awesome-dark-mode-toggle", DoxygenAwesomeDarkModeToggle); +customElements.define("doxygen-awesome-dark-mode-toggle", + DoxygenAwesomeDarkModeToggle); diff --git a/include/beman/execution/detail/as_awaitable.hpp b/include/beman/execution/detail/as_awaitable.hpp index 50345227..9ffd2439 100644 --- a/include/beman/execution/detail/as_awaitable.hpp +++ b/include/beman/execution/detail/as_awaitable.hpp @@ -31,7 +31,7 @@ struct as_awaitable_t { return ::std::forward(expr).as_awaitable(promise); } else if constexpr (::beman::execution::detail:: is_awaitable || - not::beman::execution::detail::awaitable_sender) { + !::beman::execution::detail::awaitable_sender) { return ::std::forward(expr); } else { return ::beman::execution::detail::sender_awaitable{::std::forward(expr), promise}; diff --git a/include/beman/execution/detail/basic_sender.hpp b/include/beman/execution/detail/basic_sender.hpp index 2b2c597e..7884cbb2 100644 --- a/include/beman/execution/detail/basic_sender.hpp +++ b/include/beman/execution/detail/basic_sender.hpp @@ -39,7 +39,7 @@ struct basic_sender : ::beman::execution::detail::product_type - requires(not::beman::execution::receiver) + requires(!::beman::execution::receiver) auto connect(Receiver receiver) = BEMAN_EXECUTION_DELETE("the passed receiver doesn't model receiver"); private: diff --git a/include/beman/execution/detail/bulk.hpp b/include/beman/execution/detail/bulk.hpp index 0f8786f0..cbb7d778 100644 --- a/include/beman/execution/detail/bulk.hpp +++ b/include/beman/execution/detail/bulk.hpp @@ -54,7 +54,7 @@ struct impls_for : ::beman::execution::detail::default_impls { Rcvr& rcvr, Tag, Args&&... args) noexcept -> void - requires(not::std::same_as || std::is_invocable_v) + requires(!::std::same_as || std::is_invocable_v) { if constexpr (std::same_as) { auto& [shape, f] = state; @@ -92,8 +92,8 @@ struct fixed_completions_helper> { struct may_throw; template struct may_throw { - static constexpr bool value = std::same_as && - not::std::is_nothrow_invocable(); + static constexpr bool value = + std::same_as && !::std::is_nothrow_invocable(); }; template struct may_throw> { diff --git a/include/beman/execution/detail/fwd_env.hpp b/include/beman/execution/detail/fwd_env.hpp index 877ed4ab..d0ef2d0b 100644 --- a/include/beman/execution/detail/fwd_env.hpp +++ b/include/beman/execution/detail/fwd_env.hpp @@ -28,7 +28,7 @@ class fwd_env { explicit fwd_env(Env&& e) : env(::std::forward(e)) {} template - requires(not::beman::execution::forwarding_query(::std::remove_cvref_t())) + requires(!::beman::execution::forwarding_query(::std::remove_cvref_t())) constexpr auto query(Query&& q, Args&&... args) const = BEMAN_EXECUTION_DELETE("the used query is not forwardable"); diff --git a/include/beman/execution/detail/get_completion_signatures.hpp b/include/beman/execution/detail/get_completion_signatures.hpp index b9af4954..23d5e94a 100644 --- a/include/beman/execution/detail/get_completion_signatures.hpp +++ b/include/beman/execution/detail/get_completion_signatures.hpp @@ -53,9 +53,9 @@ struct get_completion_signatures_t { public: template - requires(not::std::same_as(), - ::std::declval()))>) + requires(!::std::same_as(), + ::std::declval()))>) auto operator()(Sender&& sender, Env&& env) const noexcept { return this->get(::std::forward(sender), ::std::forward(env)); } diff --git a/include/beman/execution/detail/get_domain_late.hpp b/include/beman/execution/detail/get_domain_late.hpp index d19c49ff..c2a3f954 100644 --- a/include/beman/execution/detail/get_domain_late.hpp +++ b/include/beman/execution/detail/get_domain_late.hpp @@ -17,7 +17,7 @@ namespace beman::execution::detail { template -concept not_void = not::std::same_as; +concept not_void = !::std::same_as; template struct get_domain_late_helper { diff --git a/include/beman/execution/detail/just.hpp b/include/beman/execution/detail/just.hpp index 0869937a..6486e298 100644 --- a/include/beman/execution/detail/just.hpp +++ b/include/beman/execution/detail/just.hpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -22,12 +23,13 @@ namespace beman::execution::detail { template -concept just_size = (not::std::same_as or 1u == sizeof...(T)) && - (not::std::same_as or 0u == sizeof...(T)); +concept just_size = (!::std::same_as or 1u == sizeof...(T)) && + (!::std::same_as or 0u == sizeof...(T)); template struct just_t { template - requires ::beman::execution::detail::just_size && (::std::movable<::std::decay_t> && ...) + requires ::beman::execution::detail::just_size && + (::beman::execution::detail::movable_value && ...) auto operator()(T&&... arg) const { return ::beman::execution::detail::make_sender( *this, ::beman::execution::detail::product_type{::std::forward(arg)...}); diff --git a/include/beman/execution/detail/movable_value.hpp b/include/beman/execution/detail/movable_value.hpp index 14a064ba..7dd0a214 100644 --- a/include/beman/execution/detail/movable_value.hpp +++ b/include/beman/execution/detail/movable_value.hpp @@ -13,7 +13,7 @@ namespace beman::execution::detail { template concept movable_value = ::std::move_constructible<::std::decay_t> && ::std::constructible_from<::std::decay_t, T> && - (not::std::is_array_v<::std::remove_reference_t>); + (!::std::is_array_v<::std::remove_reference_t>); } // ---------------------------------------------------------------------------- diff --git a/include/beman/execution/detail/receiver.hpp b/include/beman/execution/detail/receiver.hpp index 969b1891..e1eb259b 100644 --- a/include/beman/execution/detail/receiver.hpp +++ b/include/beman/execution/detail/receiver.hpp @@ -20,8 +20,7 @@ concept receiver = requires(const ::std::remove_cvref_t& rcvr) { { ::beman::execution::get_env(rcvr) } -> ::beman::execution::detail::queryable; } && ::std::move_constructible<::std::remove_cvref_t> && - ::std::constructible_from<::std::remove_cvref_t, Rcvr> && - (not::std::is_final_v<::std::remove_cvref_t>); + ::std::constructible_from<::std::remove_cvref_t, Rcvr> && (!::std::is_final_v<::std::remove_cvref_t>); } // namespace beman::execution // ---------------------------------------------------------------------------- diff --git a/include/beman/execution/detail/schedule_from.hpp b/include/beman/execution/detail/schedule_from.hpp index d2f930bf..1a6fb95a 100644 --- a/include/beman/execution/detail/schedule_from.hpp +++ b/include/beman/execution/detail/schedule_from.hpp @@ -83,7 +83,7 @@ struct impls_for<::beman::execution::detail::schedule_from_t> : ::beman::executi try { ::std::visit( [this](Tuple& result) noexcept -> void { - if constexpr (not::std::same_as<::std::monostate, Tuple>) { + if constexpr (!::std::same_as<::std::monostate, Tuple>) { ::std::apply( [this](auto&& tag, auto&&... args) { tag(::std::move(this->state->receiver), ::std::move(args)...); diff --git a/include/beman/execution/detail/sender_adaptor_closure.hpp b/include/beman/execution/detail/sender_adaptor_closure.hpp index 04b8a21d..8f82aa05 100644 --- a/include/beman/execution/detail/sender_adaptor_closure.hpp +++ b/include/beman/execution/detail/sender_adaptor_closure.hpp @@ -31,7 +31,7 @@ concept is_sender_adaptor_closure = namespace beman::execution::detail::pipeable { template <::beman::execution::sender Sender, typename Adaptor> - requires(not::beman::execution::sender) && + requires(!::beman::execution::sender) && ::std::derived_from<::std::decay_t, ::beman::execution::sender_adaptor_closure<::std::decay_t>> && requires(Sender&& sender, Adaptor&& adaptor) { diff --git a/include/beman/execution/detail/sends_stopped.hpp b/include/beman/execution/detail/sends_stopped.hpp index 28d16d81..b94daae1 100644 --- a/include/beman/execution/detail/sends_stopped.hpp +++ b/include/beman/execution/detail/sends_stopped.hpp @@ -17,7 +17,7 @@ namespace beman::execution { template requires ::beman::execution::sender_in -inline constexpr bool sends_stopped{not::std::same_as< +inline constexpr bool sends_stopped{!::std::same_as< ::beman::execution::detail::type_list<>, ::beman::execution::detail::gather_signatures< ::beman::execution::set_stopped_t, ::beman::execution::completion_signatures_of_t, diff --git a/include/beman/execution/detail/single_sender_value_type.hpp b/include/beman/execution/detail/single_sender_value_type.hpp index 84aae97d..4bbffa41 100644 --- a/include/beman/execution/detail/single_sender_value_type.hpp +++ b/include/beman/execution/detail/single_sender_value_type.hpp @@ -38,8 +38,8 @@ template requires(not requires { typename ::beman::execution::value_types_of_t; }) && - (not::std::same_as<::std::variant<::std::tuple<>>, - ::beman::execution::value_types_of_t>) && + (!::std::same_as<::std::variant<::std::tuple<>>, + ::beman::execution::value_types_of_t>) && requires { typename ::beman::execution:: value_types_of_t; diff --git a/include/beman/execution/detail/split.hpp b/include/beman/execution/detail/split.hpp index a62c0cb8..f72e51a5 100644 --- a/include/beman/execution/detail/split.hpp +++ b/include/beman/execution/detail/split.hpp @@ -246,7 +246,7 @@ struct impls_for : ::beman::execution::detail::default_impls { try { ::std::visit( [&](const Arg& arg) noexcept -> void { - if constexpr (not::std::same_as<::std::decay_t, ::std::monostate>) { + if constexpr (!::std::same_as<::std::decay_t, ::std::monostate>) { ::std::apply( [&](auto tag, const auto&... args) noexcept -> void { tag(::std::move(*receiver), args...); diff --git a/include/beman/execution/detail/transform_sender.hpp b/include/beman/execution/detail/transform_sender.hpp index 5564902b..2a69659a 100644 --- a/include/beman/execution/detail/transform_sender.hpp +++ b/include/beman/execution/detail/transform_sender.hpp @@ -28,9 +28,9 @@ template requires(Domain dom, Sender&& sender, const Env&... env) { dom.transform_sender(::std::forward(sender), env...); } && - (not::std::same_as<::std::remove_cvref_t, - std::remove_cvref_t().transform_sender( - ::std::declval(), ::std::declval()...))>>) + (!::std::same_as<::std::remove_cvref_t, + std::remove_cvref_t().transform_sender( + ::std::declval(), ::std::declval()...))>>) constexpr auto transform_sender(Domain dom, Sender&& sender, const Env&... env) noexcept -> ::beman::execution::sender decltype(auto) { return ::beman::execution::detail::transform_sender( @@ -53,9 +53,9 @@ template requires(not requires(Domain dom, Sender&& sender, const Env&... env) { dom.transform_sender(::std::forward(sender), env...); }) && - (not::std::same_as<::std::remove_cvref_t, - ::std::remove_cvref_t(), ::std::declval()...))>>) + (!::std::same_as<::std::remove_cvref_t, + ::std::remove_cvref_t(), ::std::declval()...))>>) constexpr auto transform_sender(Domain dom, Sender&& sender, const Env&... env) noexcept(noexcept( ::beman::execution::default_domain{}.transform_sender(::std::declval(), ::std::declval()...))) -> ::beman::execution::sender decltype(auto) { @@ -83,9 +83,9 @@ template requires(Domain dom, Sender&& sender, const Env&... env) { dom.transform_sender(::std::forward(sender), env...); } && - (not::std::same_as<::std::remove_cvref_t, - std::remove_cvref_t().transform_sender( - ::std::declval(), ::std::declval()...))>>) + (!::std::same_as<::std::remove_cvref_t, + std::remove_cvref_t().transform_sender( + ::std::declval(), ::std::declval()...))>>) constexpr auto transform_sender(Domain dom, Sender&& sender, const Env&... env) noexcept -> ::beman::execution::sender auto { return ::beman::execution::detail::transform_sender( @@ -110,9 +110,9 @@ template requires(sizeof...(Env) < 2) && (not requires(Domain dom, Sender&& sender, const Env&... env) { dom.transform_sender(::std::forward(sender), env...); }) && - (not::std::same_as<::std::remove_cvref_t, - ::std::remove_cvref_t(), ::std::declval()...))>>) + (!::std::same_as<::std::remove_cvref_t, + ::std::remove_cvref_t(), ::std::declval()...))>>) constexpr auto transform_sender(Domain dom, Sender&& sender, const Env&... env) noexcept( noexcept(::beman::execution::detail::transform_sender( dom, diff --git a/tests/beman/execution/CMakeLists.txt b/tests/beman/execution/CMakeLists.txt index c6e28865..d66fbf45 100644 --- a/tests/beman/execution/CMakeLists.txt +++ b/tests/beman/execution/CMakeLists.txt @@ -11,6 +11,7 @@ endif() list( APPEND execution_tests + issue-144.test exec-on.test notify.test exec-scounting.test diff --git a/tests/beman/execution/exec-general.test.cpp b/tests/beman/execution/exec-general.test.cpp index 4dfd21e5..9f4f3cff 100644 --- a/tests/beman/execution/exec-general.test.cpp +++ b/tests/beman/execution/exec-general.test.cpp @@ -37,8 +37,10 @@ auto test_movable_value() -> void { static_assert(not test_detail::movable_value); static_assert(not test_detail::movable_value); + // clang-format off static_assert(not test_detail::movable_value); // NOLINT(hicpp-avoid-c-arrays) static_assert(not test_detail::movable_value); // NOLINT(hicpp-avoid-c-arrays) + // clang-format on } auto test_matching_sig() -> void { diff --git a/tests/beman/execution/exec-set-error.test.cpp b/tests/beman/execution/exec-set-error.test.cpp index 54b87c8b..bd528c02 100644 --- a/tests/beman/execution/exec-set-error.test.cpp +++ b/tests/beman/execution/exec-set-error.test.cpp @@ -25,10 +25,14 @@ struct receiver { template void test_callable() { static_assert(requires { test_std::set_error(std::declval(), 42); }); + // clang-format off static_assert(requires { test_std::set_error(std::declval(), 42); }); + // clang-format on static_assert(not requires { test_std::set_error(std::declval(), 42); }); + // clang-format off static_assert(not requires { test_std::set_error(std::declval(), 42); }); + // clang-format on static_assert(not requires { test_std::set_error(std::declval(), 42); }); static_assert(not requires { test_std::set_error(std::declval(), 42); }); static_assert(not requires { test_std::set_error(std::declval(), 42); }); diff --git a/tests/beman/execution/exec-set-stopped.test.cpp b/tests/beman/execution/exec-set-stopped.test.cpp index b8aa2530..ea7aa720 100644 --- a/tests/beman/execution/exec-set-stopped.test.cpp +++ b/tests/beman/execution/exec-set-stopped.test.cpp @@ -20,11 +20,15 @@ template auto test_callable() -> void { // can be called with non-const rvalue receiver static_assert(requires { test_std::set_stopped(std::declval()); }); + // clang-format off static_assert(requires { test_std::set_stopped(std::declval()); }); + // clang-format on // cannot be called with const or lvalue receiver static_assert(not requires { test_std::set_stopped(std::declval()); }); + // clang-format off static_assert(not requires { test_std::set_stopped(std::declval()); }); + // clang-format on static_assert(not requires { test_std::set_stopped(std::declval()); }); static_assert(not requires { test_std::set_stopped(std::declval()); }); static_assert(not requires { test_std::set_stopped(std::declval()); }); diff --git a/tests/beman/execution/exec-set-value.test.cpp b/tests/beman/execution/exec-set-value.test.cpp index 6ca5415f..292347e9 100644 --- a/tests/beman/execution/exec-set-value.test.cpp +++ b/tests/beman/execution/exec-set-value.test.cpp @@ -33,11 +33,15 @@ template auto test_callable(Args&&... args) -> void { // can be called with non-const rvalue receiver static_assert(requires { test_std::set_value(std::declval(), args...); }); + // clang-format off static_assert(requires { test_std::set_value(std::declval(), args...); }); + // clang-format on // cannot be called with const or lvalue receiver static_assert(not requires { test_std::set_value(std::declval(), args...); }); + // clang-format off static_assert(not requires { test_std::set_value(std::declval(), args...); }); + // clang-format on static_assert(not requires { test_std::set_value(std::declval(), args...); }); static_assert(not requires { test_std::set_value(std::declval(), args...); }); static_assert(not requires { test_std::set_value(std::declval(), args...); }); diff --git a/tests/beman/execution/issue-144.test.cpp b/tests/beman/execution/issue-144.test.cpp new file mode 100644 index 00000000..6f45afcb --- /dev/null +++ b/tests/beman/execution/issue-144.test.cpp @@ -0,0 +1,11 @@ +// tests/beman/execution/issue-144.test.cpp -*-C++-*- +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception + +#include + +namespace bex = beman::execution; + +int main() { + double d = 19.0; + bex::just([d](auto) { return d; }); +} diff --git a/tests/beman/execution/stopcallback-cons.test.cpp b/tests/beman/execution/stopcallback-cons.test.cpp index d460710a..7580951e 100644 --- a/tests/beman/execution/stopcallback-cons.test.cpp +++ b/tests/beman/execution/stopcallback-cons.test.cpp @@ -21,9 +21,9 @@ TEST(stopcallback_cons) { }; static_assert(::std::is_constructible_v<::test_std::stop_callback, const ::test_std::stop_token&, int*>); static_assert( - not::std::is_constructible_v<::test_std::stop_callback, const ::test_std::stop_token&, bool*>); + !::std::is_constructible_v<::test_std::stop_callback, const ::test_std::stop_token&, bool*>); static_assert(::std::is_constructible_v<::test_std::stop_callback, ::test_std::stop_token&&, int*>); - static_assert(not::std::is_constructible_v<::test_std::stop_callback, ::test_std::stop_token&&, bool*>); + static_assert(!::std::is_constructible_v<::test_std::stop_callback, ::test_std::stop_token&&, bool*>); // Reference: [stopcallback.cons] p2, p3 // Plan: diff --git a/tests/beman/execution/stopcallback-general.test.cpp b/tests/beman/execution/stopcallback-general.test.cpp index e0260cf4..bc13593e 100644 --- a/tests/beman/execution/stopcallback-general.test.cpp +++ b/tests/beman/execution/stopcallback-general.test.cpp @@ -29,10 +29,10 @@ auto test_stop_callback_interface() -> void { CB ccb(ctoken, ThrowInit()); CB tcb{::test_std::stop_token(), ThrowInit()}; - static_assert(not::std::is_copy_constructible_v); - static_assert(not::std::is_move_constructible_v); - static_assert(not::std::is_copy_assignable_v); - static_assert(not::std::is_move_assignable_v); + static_assert(!::std::is_copy_constructible_v); + static_assert(!::std::is_move_constructible_v); + static_assert(!::std::is_copy_assignable_v); + static_assert(!::std::is_move_assignable_v); ::test_std::stop_callback cb(ctoken, Callback(ThrowInit())); } diff --git a/tests/beman/execution/stopcallback-inplace-general.test.cpp b/tests/beman/execution/stopcallback-inplace-general.test.cpp index feed1681..accbcd92 100644 --- a/tests/beman/execution/stopcallback-inplace-general.test.cpp +++ b/tests/beman/execution/stopcallback-inplace-general.test.cpp @@ -16,10 +16,10 @@ TEST(stopcallback_inplace_general) { using CB = ::test_std::inplace_stop_callback; static_assert(::std::same_as); static_assert(::std::destructible); - static_assert(not::std::move_constructible); - static_assert(not::std::copy_constructible); - static_assert(not::std::is_move_assignable_v); - static_assert(not::std::is_copy_assignable_v); + static_assert(!::std::move_constructible); + static_assert(!::std::copy_constructible); + static_assert(!::std::is_move_assignable_v); + static_assert(!::std::is_copy_assignable_v); Callback callback; ::test_std::inplace_stop_callback cb(::test_std::inplace_stop_token(), callback); diff --git a/tests/beman/execution/stoptoken-concepts.test.cpp b/tests/beman/execution/stoptoken-concepts.test.cpp index 2eb4969d..fa7bdeaa 100644 --- a/tests/beman/execution/stoptoken-concepts.test.cpp +++ b/tests/beman/execution/stoptoken-concepts.test.cpp @@ -183,10 +183,10 @@ auto test_unstoppable_token() -> void { // Reference: [stoptoken.concepts] p4 static_assert(::test_std::unstoppable_token<::unstoppable_token::token>); - static_assert(not::test_std::stoppable_token<::unstoppable_token::token>); - static_assert(not::test_std::unstoppable_token<::unstoppable_token::token>); + static_assert(!::test_std::stoppable_token<::unstoppable_token::token>); + static_assert(!::test_std::unstoppable_token<::unstoppable_token::token>); static_assert(::test_std::stoppable_token<::unstoppable_token::token>); - static_assert(not::test_std::unstoppable_token<::unstoppable_token::token>); + static_assert(!::test_std::unstoppable_token<::unstoppable_token::token>); } namespace stoppable_source { @@ -228,12 +228,12 @@ auto test_detail_stoppable_source() -> void { // Reference: [stoptoken.concepts] p6 static_assert(::test_detail::stoppable_source<::stoppable_source::source>); - static_assert(not::test_detail::stoppable_source<::stoppable_source::source>); - static_assert(not::test_detail::stoppable_source<::stoppable_source::source>); - static_assert(not::test_detail::stoppable_source<::stoppable_source::source>); - static_assert(not::test_detail::stoppable_source<::stoppable_source::source>); - static_assert(not::test_detail::stoppable_source<::stoppable_source::source>); - static_assert(not::test_detail::stoppable_source<::stoppable_source::source>); + static_assert(!::test_detail::stoppable_source<::stoppable_source::source>); + static_assert(!::test_detail::stoppable_source<::stoppable_source::source>); + static_assert(!::test_detail::stoppable_source<::stoppable_source::source>); + static_assert(!::test_detail::stoppable_source<::stoppable_source::source>); + static_assert(!::test_detail::stoppable_source<::stoppable_source::source>); + static_assert(!::test_detail::stoppable_source<::stoppable_source::source>); } } // namespace diff --git a/tests/beman/execution/thread-stoptoken-syn.compile.test.cpp b/tests/beman/execution/thread-stoptoken-syn.compile.test.cpp index 80a83e50..0c1bfef0 100644 --- a/tests/beman/execution/thread-stoptoken-syn.compile.test.cpp +++ b/tests/beman/execution/thread-stoptoken-syn.compile.test.cpp @@ -21,11 +21,11 @@ TEST(thread_stoptoken_syn) { // - Then the compiler should OK doing so. // Reference: [thread.stoptoken.syn] - static_assert((not::test_detail::stoppable_callback_for)); - static_assert((not::test_detail::stoppable_source)); + static_assert((!::test_detail::stoppable_callback_for)); + static_assert((!::test_detail::stoppable_source)); - static_assert((not::test_std::stoppable_token)); - static_assert((not::test_std::unstoppable_token)); + static_assert((!::test_std::stoppable_token)); + static_assert((!::test_std::unstoppable_token)); type_exists<::test_std::stop_token>(); type_exists<::test_std::stop_source>();