A class extending from SenderObjectBase that wraps any Sender
checks that T is a Sender
calls connect on the Sender but stores the OperationState on the heap
Converts any Sender to a polymorphic SenderObject
A polymorphic sender of type T
A sender that delays before calling setValue
A sender that always calls setDone
Type-erased operational state object used in polymorphic senders
A sender that always sets an error
A Sender that sends a single value of type T
A sender that always calls setValue with no args
This tests whether a Sender, by itself, makes any calls to the setError function. If a Sender is connected to a Receiver that has a non-nothrow setValue function, a Sender can still throw, but only Exceptions throw from that Receiver's setValue function.
It is ok for the operation state to be on the heap, but if it is on the stack we need to ensure any copies are elided. We can't be 100% sure (the compiler may still blit), but this is the best we can do.