Skip to content

Commit 7453078

Browse files
authored
Merge pull request #35 from beman-project/fix-forwarding-env
Fix forwarding env
2 parents 81c58fe + 2e5536b commit 7453078

File tree

8 files changed

+33
-30
lines changed

8 files changed

+33
-30
lines changed

examples/CMakeLists.txt

+1-3
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@
33
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
44
# cmake-format: on
55

6-
set(BEMAN_EXECUTION26_LIBRARY beman_execution26)
7-
8-
include(GNUInstallDirs)
6+
set(BEMAN_EXECUTION26_LIBRARY beman_${TARGET_NAME})
97

108
set(EXAMPLES
119
stop_token

include/beman/execution26/detail/common.hpp

+10
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,14 @@
2525

2626
// ----------------------------------------------------------------------------
2727

28+
namespace beman::execution26::detail
29+
{
30+
template <typename...> struct fail_type;
31+
template <typename...T>
32+
auto fail(T&&...) { fail_type<T...>{}; }
33+
auto use(auto&&...) noexcept -> void {}
34+
}
35+
36+
// ----------------------------------------------------------------------------
37+
2838
#endif

include/beman/execution26/detail/completion_signatures_of_t.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
namespace beman::execution26
1515
{
1616
template <typename Sender, typename Env = ::beman::execution26::empty_env>
17-
requires ::beman::execution26::sender_in<Sender>
17+
requires ::beman::execution26::sender_in<Sender, Env>
1818
using completion_signatures_of_t
1919
= ::beman::execution26::detail::call_result_t<
2020
::beman::execution26::get_completion_signatures_t, Sender, Env

include/beman/execution26/detail/fwd_env.hpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,13 @@ namespace beman::execution26::detail
2828
= BEMAN_EXECUTION26_DELETE("the used query is not forwardable");
2929

3030
template <typename Query, typename... Args>
31-
requires (::beman::execution26::forwarding_query(::std::remove_cvref_t<Query>()))
31+
requires(::beman::execution26::forwarding_query(::std::remove_cvref_t<Query>()))
3232
&& requires(Env const& env, Query&& q, Args&&... args)
3333
{
3434
env.query(q, ::std::forward<Args>(args)...);
3535
}
3636
constexpr auto query(Query&& q, Args&&... args) const
37+
noexcept(noexcept(env.query(q, ::std::forward<Args>(args)...)))
3738
{
3839
return env.query(q, ::std::forward<Args>(args)...);
3940
}

include/beman/execution26/detail/into_variant.hpp

-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
#include <beman/execution26/detail/make_sender.hpp>
1616
#include <beman/execution26/detail/meta_combine.hpp>
1717
#include <beman/execution26/detail/sender.hpp>
18-
#include <beman/execution26/detail/sender_in.hpp>
1918
#include <beman/execution26/detail/sends_stopped.hpp>
2019
#include <beman/execution26/detail/set_error.hpp>
2120
#include <beman/execution26/detail/set_value.hpp>

src/beman/execution26/CMakeLists.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# cmake-format: off
2-
# src/beman/${TARGET_NAME}/CMakeLists.txt -*-makefile-*-
2+
# src/beman/execution26/CMakeLists.txt -*-makefile-*-
33
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
44
# cmake-format: on
55

src/beman/execution26/tests/exec-into-variant.pass.cpp

-3
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818

1919
namespace
2020
{
21-
auto use(auto&&...) {}
22-
2321
struct non_sender {};
2422
struct sender
2523
{
@@ -80,7 +78,6 @@ namespace
8078
assert(not called);
8179
op.start();
8280
assert(called);
83-
use(op);
8481
}
8582
}
8683

src/beman/execution26/tests/exec-snd-expos.pass.cpp

+18-20
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,6 @@
3939

4040
namespace
4141
{
42-
auto use(auto&&...) {}
43-
4442
struct domain
4543
{
4644
int value{};
@@ -972,22 +970,22 @@ namespace
972970
test_detail::basic_state state{std::move(s), receiver{}};
973971
auto product{test_detail::connect_all(&state, std::move(s), std::index_sequence<>{})};
974972
assert(product.size() == 0);
975-
use(product);
973+
test_std::detail::use(product);
976974
}
977975
{
978976
sender0 const s{};
979977
test_detail::basic_state state{std::move(s), receiver{}};
980978
auto product{test_detail::connect_all(&state, std::move(s), std::index_sequence<>{})};
981979
assert(product.size() == 0);
982-
use(product);
980+
test_std::detail::use(product);
983981
}
984982
{
985983
static_assert(requires{ sender1{}.connect(receiver{}); });
986984
static_assert(requires{ test_std::connect(sender1{}, receiver{}); });
987985
test_detail::basic_state state{sender1{}, receiver{}};
988986
auto product{test_detail::connect_all(&state, sender1{}, std::index_sequence<0>{})};
989987
assert(product.size() == 1);
990-
use(product);
988+
test_std::detail::use(product);
991989
}
992990
{
993991
sender1 const s{};
@@ -996,15 +994,15 @@ namespace
996994
test_detail::basic_state state{std::move(s), receiver{}};
997995
auto product{test_detail::connect_all(&state, std::move(s), std::index_sequence<0>{})};
998996
assert(product.size() == 1);
999-
use(product);
997+
test_std::detail::use(product);
1000998
}
1001999
{
10021000
static_assert(requires{ sender2{}.connect(receiver{}); });
10031001
static_assert(requires{ test_std::connect(sender2{}, receiver{}); });
10041002
test_detail::basic_state state{sender2{}, receiver{}};
10051003
auto product{test_detail::connect_all(&state, sender2{}, std::index_sequence<0, 1>{})};
10061004
assert(product.size() == 2);
1007-
use(product);
1005+
test_std::detail::use(product);
10081006
}
10091007
{
10101008
sender2 const s{};
@@ -1013,15 +1011,15 @@ namespace
10131011
test_detail::basic_state state{std::move(s), receiver{}};
10141012
auto product{test_detail::connect_all(&state, std::move(s), std::index_sequence<0, 1>{})};
10151013
assert(product.size() == 2);
1016-
use(product);
1014+
test_std::detail::use(product);
10171015
}
10181016
{
10191017
static_assert(requires{ sender3{}.connect(receiver{}); });
10201018
static_assert(requires{ test_std::connect(sender3{}, receiver{}); });
10211019
test_detail::basic_state state{sender3{}, receiver{}};
10221020
auto product{test_detail::connect_all(&state, sender3{}, std::index_sequence<0, 1, 2>{})};
10231021
assert(product.size() == 3);
1024-
use(product);
1022+
test_std::detail::use(product);
10251023
}
10261024
{
10271025
sender3 const s{};
@@ -1030,15 +1028,15 @@ namespace
10301028
test_detail::basic_state state{std::move(s), receiver{}};
10311029
auto product{test_detail::connect_all(&state, std::move(s), std::index_sequence<0, 1, 2>{})};
10321030
assert(product.size() == 3);
1033-
use(product);
1031+
test_std::detail::use(product);
10341032
}
10351033
{
10361034
static_assert(requires{ sender4{}.connect(receiver{}); });
10371035
static_assert(requires{ test_std::connect(sender4{}, receiver{}); });
10381036
test_detail::basic_state state{sender4{}, receiver{}};
10391037
auto product{test_detail::connect_all(&state, sender4{}, std::index_sequence<0, 1, 2, 3>{})};
10401038
assert(product.size() == 4);
1041-
use(product);
1039+
test_std::detail::use(product);
10421040
}
10431041
{
10441042
sender4 const s{};
@@ -1047,7 +1045,7 @@ namespace
10471045
test_detail::basic_state state{std::move(s), receiver{}};
10481046
auto product{test_detail::connect_all(&state, std::move(s), std::index_sequence<0, 1, 2, 3>{})};
10491047
assert(product.size() == 4);
1050-
use(product);
1048+
test_std::detail::use(product);
10511049
}
10521050

10531051
//-dk: TODO test connect_all
@@ -1197,9 +1195,9 @@ namespace
11971195

11981196
{
11991197
auto&&[a, b, c] = tagged_sender{basic_sender_tag{}, data{}, sender0{}};
1200-
use(a);
1201-
use(b);
1202-
use(c);
1198+
test_std::detail::use(a);
1199+
test_std::detail::use(b);
1200+
test_std::detail::use(c);
12031201
static_assert(std::same_as<basic_sender_tag, std::remove_cvref_t<decltype(a)>>);
12041202
}
12051203

@@ -1222,10 +1220,10 @@ namespace
12221220

12231221
basic_sender bs{basic_sender_tag{}, data{}, sender0 {}};
12241222
basic_sender const& cbs{bs};
1225-
use(cbs);
1223+
test_std::detail::use(cbs);
12261224

12271225
auto&&[tag, data, children] = test_detail::get_sender_data(bs);
1228-
use(tag, data, children);
1226+
test_std::detail::use(tag, data, children);
12291227
static_assert(std::same_as<basic_sender_tag, std::remove_cvref_t<decltype(tag)>>);
12301228

12311229
static_assert(std::same_as<
@@ -1250,14 +1248,14 @@ namespace
12501248
#endif
12511249

12521250
auto ge{test_std::get_env(bs)};
1253-
use(ge);
1251+
test_std::detail::use(ge);
12541252
static_assert(std::same_as<
12551253
test_detail::fwd_env<sender0::env>,
12561254
decltype(ge)
12571255
>);
12581256

12591257
auto op{test_std::connect(bs, receiver{})};
1260-
use(op);
1258+
test_std::detail::use(op);
12611259
#if 0
12621260
static_assert(std::same_as<
12631261
basic_sender_tag::sender::completion_signatures,
@@ -1442,7 +1440,7 @@ namespace
14421440
auto we_op{test_std::connect(we_sender, write_env_receiver{&has_both_properties})};
14431441
we_op.start();
14441442
assert(has_both_properties);
1445-
use(we_op);
1443+
test_std::detail::use(we_op);
14461444
}
14471445

14481446
template <typename... T>

0 commit comments

Comments
 (0)