On Thursday, 6 August 2020 at 12:51:22 UTC, H. S. Teoh wrote:
Of course. In fact, it's trivial:

------
template maxSizeOf(T...)
{
        align(1) union Impl {
                T t;
        }
        enum maxSizeOf = Impl.sizeof;
}

I originally copied my original version of `maxSizeOf` from `std.variant.maxSize` currently being

template maxSize(T...)
{
    static if (T.length == 1)
    {
        enum size_t maxSize = T[0].sizeof;
    }
    else
    {
        import std.algorithm.comparison : max;
enum size_t maxSize = max(T[0].sizeof, maxSize!(T[1 .. $]));
    }
}

.

It should be updated to use this trick.

However, your solution

template maxSize(T...)
{
    align(1) union Impl { T t; }
        enum maxSize = Impl.sizeof;
}

fails as

variable `std.variant.maxSize!(void, string).Impl.__t_field_0` variables cannot be of type `void`

because one of the instances of `maxSize` in std.variant has `void` as a member `T...`.

Do you have any simple solution to this, H. S. Teoh?

Reply via email to