David Abrahams wrote:

[...]

>> Everything seems already defined ;)
>
> ???

Every time I'm thinking about something, I find that it was already defined
somewhere else.

>> Given the fact optional<>::m_storage is aligned like a bool...:
>>
>> - Maybe aligned_storage<> should always destruct its object.  It
>> would be the user's responsability to construct the object before
>> its destruction, otherwise the result would be undefined.
>
> And if the object's constructor throws an exception, what then?

I am not familiar with exceptions that much, but calling implicitly the
object's destructor will not affect its construction if the user does not
forget to call its constructor.  Doesn't it?

[...]

>> struct A
>> {
>>     typedef optional_typelist< typelist<char, short, double> >
>> optional_members;
>>     typedef array<bool, optional_members::size> optional_inits;
>>
>>     optional_inits init;    // Array of booleans
>>     optional_members storage;    // Typelist storage
>> };
>>
>> In this example, optional_typelist<T1, T2, T3, ...> would be a list
>> of optional<T1>, optional<T2>, optional<T3>, ...
>>
>> It could be simplified even more, but this is just a suggestion.
>
> You're really a fiend for low-level optimizations, aren't you?

Yes, I'm trying to promote those optimizations whenever possible...  Maybe
my example was too much ugly.  Here is another one:

struct A : optionals<char, short, double>
{
    void foo()
    {
        new (optional<2>) double(3.1416);
    }
};

Given that optionals<> is similar to a tuple<> and it will generate two
distinct lists: one list of booleans and another list of storage types.



Philippe A. Bouchard




_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to