I've just stumbled upon the std::alignment_of
type trait, and its soon-to-be friend std::alignment_of_v
. They seem to have been specifically designed to be equivalent to a plain call to alignof
, and the future addition of the _v
helper indicates that it's not just a legacy bit.
What is the use of std::alignment_of
(_v
), when we have alignof
?
They are almost completely redundant. As @Revolver noted, they were introduced in different papers, and alignment_of
comes from boost
nearly verbatim.
But that does not mean the trait is useless.
A template<class...>class
can be passed to other template
s and used with metaprogramming. Operators like alignof
cannot: you would have to write the template<class>class alignment_of
before you could pass it to metaprogramming facilities.
Now the same could be said of sizeof
needing a std::size_of<class>
template.
...
The addition of _v
was because they swept every ::value
integral_constant
-type template in std
and added a _v
variable template. Considering which ones where worthy and which not would be bikeshed painting and nearly pointless: it is easier to do every one than spend effort picking the worthy ones to do. It being done is not evidence the feature is not obsolete.
The std::alignment_of
is introduced as port of Boost type traits library. It predates C++11 and alignof
keyword. That trait was superseded by alignof
operator, but it was kept mainly for compatibility purposes (so you could just replace boost::
with std::
) and _v
variable alias is introduced for consistency with other parts of the library.
One nice thing I found in practice is that alignof
is simply syntactically invalid for old code, whereas alignment_of
is just a standard template. So you can stay compatible with older compilers by providing an implementation of alignment_of
using whatever alternative syntax your compiler accepts, then use that everywhere.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With