揮発性のメモ2

http://d.hatena.ne.jp/iww/

hoge

error: cannot bind packed field 'a.hoge_t::n' to 'int&'

パックした構造体のメンバーは、参照で利用できない。

#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++ プログラミング


回避方法は無い。