Question

Consider the code below:

class Foo
{
    ...
};

template <class T>
class Bar
{
    T t;
};

Is it guaranteed that sizeof(Foo) == sizeof(Bar<Foo>) always evaluates to true across any standard C++ compiler?

Are there any situations in which the above condition would never be true?

Was it helpful?

Solution

I don't believe the standard makes that guarantee - an implementation is free to add padding at the end of Bar.

But it's hard to see why any real implementation would add padding at the end of Bar but not Foo. Unless, say, Foo was explicitly given some non-default alignment (e.g. byte aligned); Bar would then be padded to the default alignment.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top