以下代碼是否合法(在C++ 11/14中)?通過其成員的地址激活嵌套聯合是否合法?
bool foo() {
union bar { int i; bool b; };
union baz { char c; bar b; };
auto b = baz{'x'};
auto barptr = &b.b;
auto boolptr = &barptr->b;
new (boolptr) bool{true};
return b.b.b;
}
這個例子是愚蠢的,但我與使用嵌套的工會,而不是一個char []
塊的變體成員可變參數variant
實施玩耍,並允許這將使我在拷貝構造函數吸塵器當前的嘗試。
把它分解成兩個子問題:
- 是
boolptr
通過訪問barptr
法律即使b.b
無效成員分配? boolptr
的就地施工是否激活b.b
和b.b.b
?
參考標準將不勝感激。
也許部分地在這裏找到答案:http://stackoverflow.com/questions/11373203/accessing-inactive-union-member-undefined – 2014-10-30 16:27:18
有沒有什麼特殊原因,假設表達式'bb'比'*(&(bb))'更合法?因爲否則,很明顯,兩者都是同樣合法的(沒有人會嚴肅地爭辯說'b.b'是_less_合法!) – MSalters 2014-10-30 16:55:43