Учитывая, что void *
для какого-либо хранилища, как проверить, указывает ли он на правильно выровненную память без какого-либо определенного поведения реализации?
Конечно, у нас есть std::align
, но есть ли более эффективный способ сделать это?
template <std::size_t alignment>
inline bool is_aligned(void * ptr) noexcept {
std::size_t max = 1u;
return std::align(alignment, 1u, ptr, max);
}
PS: Мне нужно сделать это в стандарте, совместимом с C++, не полагаясь на какие-либо специфичные для платформы (определенные при реализации) хаки.
PPS: Я прошу прощения за мое (понимание) английского языка, это не мой родной язык.
EDIT (2018.08.24): Удалено "эффективное" из заголовка, добавлено еще больше формулировок, чтобы подчеркнуть, что я не хочу, чтобы какая-либо реализация определялась или определялась платформой.