"Philippe A. Bouchard" <[EMAIL PROTECTED]> writes: > David Abrahams wrote: >> "Philippe A. Bouchard" <[EMAIL PROTECTED]> writes: >> >>> Hi again, >>> >>> I am doing some helper class that will pad the space after a >>> given type until it reaches a machine word boundary. This word >>> boundary would be the maximum of (alignment_of<T>::value - >>> sizeof(char)) where T is any 'typename', 'typename' is one of >>> {is_class<U>::value == false} and U is any type. >> >> Even if what you wrote made sense, which I'm not sure it does, >> >> [to me at least - how can a word boundary be a number (max over >> all types T of alignment_of<T> - sizeof(char)), rather than an >> address? And then why subtract sizeof(char), i.e. 1, from the >> maximal alignment?] > > Forget the [- sizeof(char)] it is erroneous, what I meant was something > trivial [/ sizeof(char)].
OK, so what you really want is alignment_of<boost::detail::max_align>. >> that algorithm relies on a big non-portable assumption, doesn't it? >> Even if you enumerated all non-class types, there's no reason to think >> that the maximal alignment has any relationship to a machine word. > > It is purely theoretical. max(alignment<T>) should reach its maximum > somehow, which I cannot yet proove. STL has simplified this with a simple > constant set to 8. By "STL" I presume you mean your particular STL implementation. >> Since I can't figure out what any of this is actually supposed to >> mean, I guess I can't help with that. > > It consist of determining the number of bytes required to reach the next > word boundary. > > Ex.: > > - The processor aligns each character to 8 bits. > - The processor aligns each integer to 32 bits. > > 0x8000 character > 0x8001 padding > 0x8002 padding > 0x8003 padding > 0x8004 integer > 0x8005 integer > 0x8006 integer > 0x8007 integer template <class T> struct padding_of { BOOST_STATIC_CONSTANT( std::size_t, value = alignment_of<max_align>::value - sizeof(T) % alignment_of<T>::value ); }; or, if you don't trust max_align, then: template <class T> struct padding_of { BOOST_STATIC_CONSTANT( std::size_t, value = alignment_of<max_align>::value % (sizeof(T) % alignment_of<T>::value) ); }; I guess. HTH, -- Dave Abrahams Boost Consulting www.boost-consulting.com _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost