パックした構造体のメンバーは、参照で利用できない。
#include <iostream> using namespace std; struct hoge_t{ int n; } __attribute__((__packed__)); void setan( int &n ){ n = 123; } int main() { hoge_t a; setan( a.n ); // ★コンパイルエラー cout << a.n << endl; return 0; }
prog.cpp: In function 'int main()': prog.cpp:14:14: error: cannot bind packed field 'a.hoge_t::n' to 'int&' setan( a.n ); // ★コンパイルエラー ^
アライメントがずれていなくても、packedがついているだけでエラー対象となる。
c++ - Why can't I return a reference to a packed field? - Stack Overflow
c++ - Passing reference of packed struct member to template. gcc bug? - Stack Overflow
C++ プログラミング
回避方法は無い。