Boost logo

Boost :

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

Alright, tell me if this code works properly.


boost::shared_ptr<synapse::connection> c;
     my_button b;
    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, gregod at, cpdaniel at, john at