Subject: Re: [boost] Synapse library review starts today December 2
From: Klemens Morgenstern (klemens.morgenstern_at_[hidden])
Date: 2016-12-04 07:09:16
Am 04.12.2016 um 11:45 schrieb Emil Dotchevski:
> On Sat, Dec 3, 2016 at 10:07 AM, Klemens Morgenstern <
> klemens.morgenstern_at_[hidden]> wrote:
>> Am 03.12.2016 um 18:56 schrieb Peter Dimov:
>>> Klemens Morgenstern wrote:
>>> But really having a void* as part of a public interface would've given
>>>> you a no, even if everything else was perfect with this library.
>>> This objection of yours doesn't make much sense to me. What problem are
>>> you trying to prevent? Objects of different types don't typically share the
>>> same address, so type safety can hardly be violated. Well, I suppose you
>>> could use the wrong member of a union by mistake.
>> Or a boost.variant.
> In Synapse, emitters are identified by their address, so union members
> represent the same emitter, by definition. Even if somehow the type of the
> emitter participated in its identifier, you'd have the same problem in case
> of union members of the same type.
>> Or you could just by coincidence have a new object at the address of an
>> old one, long after it has been deleted - which is actually easy to do,
>> since you can put the objects that emit on the stack.
> Use shared_ptr with null deleter and weak_ptr to avoid that. See "Emitter
> lifetime safety" in http://zajo.github.io/boost-synapse/Tutorial.html.
Alright, tell me if this code works properly.
synapse::emit<button_clicked>(&b); //should work properly
int i = 42;
synapse::emit<button_clicked>(&i); //yeah, not a good idea
And this can be caught at compile-time.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk