class Base {
protected:
union {
struct {
bool bBold : 1;
bool bFakeBold : 1;
};
int a;
};
public:
bool isBold() {
return bBold;
}
};
klasa Test:dlaczego ochrona nie chroni członka w tej klasie?
#include <assert.h>
#include <stdio.h>
int main()
{
Base d;
d.bBold = false;
assert(d.isBold() == false);
d.bBold = true;
assert(d.isBold() == true);
printf("good");
return 0;
}
Zarówno msvc11 i g ++ skompilować bez błędów.
Dlaczego?
Wygląda na kolejny powód, aby nie używać związków. –
clang 3.2 daje 'error: 'bBold' jest chronionym członkiem 'Base'' zgodnie z oczekiwaniami. gcc 4.7.2 nie narzeka (dla 'protected', a nawet dla' private') – alfC
msvc daje ostrzeżenie [C4201] (http://msdn.microsoft.com/en-us/library/c89bw853 (v = vs .71) .aspx) – spiritwolfform