The following code gives me this error when compiled with avr-g++ compiler ignoring packed attribute because of unpacked non-POD field 'float& foo::BAR'
what is the reason?
class foo {
public:
foo(float &bar);
private:
float &BAR;
};
foo::foo(float &bar):BAR(bar)
{
}
int main()
{
float something;
foo fooobject(something);
}
I don't know about your case in particular, but just to clarify for other Googlers, the warning makes sense when you actually
__attribute__((packed))
as in:then with GCC 8.1.0:
it warns:
because as explained at: What are POD types in C++? the data contained inside PODs is not well defined by the standard, and therefore intuitively
__attribute__((packed))
won't give you much in that case.In particular, the reference member in your example makes
foo
non-POD as of C++17, although of course you are not using__attribute__((packed))
so the warning does not make sense.I cannot reproduce the warning with your code on Ubuntu 16.04 AMD64.
It appears to be a compiler bug : https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58798.