Compile Error When Wrapping Receiver by Derivation
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 35/100
Hướng nghiên cứu
Tái hiện lỗi với ví dụ sender và receiver, sử dụng build.log đính kèm làm chẩn đoán dự kiến. Bắt đầu tại include/stdexec/__detail/__basic_sender.hpp dòng 362 và theo dõi cách kiểu receiver dẫn xuất được sử dụng khi kết nối operation. Hoàn tất khi ví dụ biên dịch mà không nhầm receiver dẫn xuất với kiểu cơ sở của nó.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Given:
template<::stdexec::receiver Receiver>
struct receiver : Receiver {
template<typename T>
requires std::constructible_from<Receiver, T>
explicit constexpr receiver(T&& t) noexcept(
std::is_nothrow_constructible_v<Receiver, T>)
: Receiver(std::forward<T>(t))
{}
};
template<::stdexec::sender Sender>
struct sender {
using sender_concept = ::stdexec::sender_t;
template<typename T>
requires std::constructible_from<Sender, T>
explicit constexpr sender(T&& t) noexcept(
std::is_nothrow_constructible_v<Sender, T>)
: sender_(std::forward<T>(t))
{}
template<typename Self, typename Env>
::stdexec::completion_signatures_of_t<
decltype(std::declval<Self>().sender_),
Env> get_completion_signatures(this Self&&, const Env&);
template<typename Self, typename Receiver>
requires ::stdexec::sender_to<
Sender,
receiver<std::remove_cvref_t<Receiver>>>
auto connect(this Self&& self, Receiver&& r) noexcept(
noexcept(
::stdexec::connect(
std::declval<Self>().sender_,
receiver<std::remove_cvref_t<Receiver>>(std::declval<Receiver>()))))
{
return ::stdexec::connect(
std::forward<Self>(self).sender_,
receiver<std::remove_cvref_t<Receiver>>(std::forward<Receiver>(r)));
}
private:
Sender sender_;
};
template<typename T>
explicit sender(T) -> sender<T>;
The following fails to compile (at least on GCC 14.1.0):
auto op = ::stdexec::connect(
::stdexec::just() | ::stdexec::let_value([]() {
return sender(
::stdexec::just() | ::stdexec::then([]() noexcept {
return 5;
}));
}),
make_receiver([](auto&&...) noexcept {}));
Where the make_receiver invocation simply creates a receiver that accepts anything.
Internally the machinery seems to be confusing the derived type with the base type:
/scratch/mdx/src/../include/stdexec/__detail/__basic_sender.hpp:362:84: error: cannot convert ‘stdexec::__detail::__op_state<stdexec::__sexpr<<lambda closure object>stdexec::{anonymous}::<lambda()>(), stdexec::{anonymous}::__anon>, mdx::execution::tests::{anonymous}::receiver<stdexec::__any_::__receiver_ref<stdexec::completion_signatures<stdexec::__rcvrs::set_value_t(int)> > > >* const’ to ‘stdexec::__detail::__receiver<stdexec::__any_::__receiver_ref<stdexec::completion_signatures<stdexec::__rcvrs::set_value_t(int)> >, stdexec::__sexpr<<lambda closure object>stdexec::{anonymous}::<lambda()>(), stdexec::{anonymous}::__anon>, stdexec::__muchar (*)[1]>::__t::__parent_op_t*’ {aka ‘stdexec::__detail::__op_state<stdexec::__sexpr<<lambda closure object>stdexec::{anonymous}::<lambda()>(), stdexec::{anonymous}::__anon>, stdexec::__any_::__receiver_ref<stdexec::completion_signatures<stdexec::__rcvrs::set_value_t(int)> > >*’} in initialization
362 | return __tuple{connect(static_cast<_Child&&>(__child), __receiver_t<_Is>{__op_})...};
| ^~~~~
| |
| stdexec::__detail::__op_state<stdexec::__sexpr<<lambda closure object>stdexec::{anonymous}::<lambda()>(), stdexec::{anonymous}::__anon>, mdx::execution::tests::{anonymous}::receiver<stdexec::__any_::__receiver_ref<stdexec::completion_signatures<stdexec::__rcvrs::set_value_t(int)> > > >* const
Full compilation output attached.
- Ngôn ngữ chính
- C++
- Star
- 2.4k
- Fork
- 274
- Merge trung bình
- 1 ngày 13 giờ
- Pull request đã merge (30 ngày)
- 38
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của NVIDIA/stdexec
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
NVIDIA/stdexec#1751 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
continues_on: hop opstate not connected with secondary environmentCó thể đã có người làm @ericniebler đã nhận 15 ngày trước. Đang mở
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 45/100
NVIDIA/stdexec#2268 · 4 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 48/100
NVIDIA/stdexec#2240 · 5 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 65/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 25/100
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của NVIDIA/stdexec
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
Icinga/icinga2#11077 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 66/100
-
agent:WSL bug linux LOW ui
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 78/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Copter: PosHold brake-entry threshold became 16 deg instead of 0.16 deg after the radians conversionCó thể đã có người làm Có pull request liên kết đang mở hoặc đã được merge. Đang mở
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 78/100
ArduPilot/ardupilot#34617 · 1 bình luận · 1 reaction ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
tesseract-robotics/tesseract_nanobind#168 ·
Maintainer thường phản hồi trong vòng 1 ngày