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?