You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

38 lines
788 B

#pragma once
#include "core.h"
namespace vlc
{
#ifndef VLC_HAS_STD_ALIGNED_UNION
namespace detail
{
template<size_t...> struct Max;
template<> struct Max<>
{
static constexpr size_t value = 0;
};
template<size_t val> struct Max<val>
{
static constexpr size_t value = val;
};
template<size_t A, size_t B, size_t... Rest> struct Max<A, B, Rest...> :
public Max<A < B ? B : A, Rest...>
{
};
}
template<size_t minSize, typename... Types> struct aligned_union
{
static constexpr size_t len = detail::Max<minSize, sizeof(Types)...>::value;
static constexpr size_t alignment = detail::Max<std::alignment_of<Types>::value...>::value;
using type = typename std::aligned_storage<len, alignment>::type;
};
#else
using std::aligned_union;
#endif
}