Pour le code suivant:Membre de l'Union a Constructor défini par l'utilisateur-
class Foo{
int foo;
public:
Foo() : foo(13) {}
int getFoo() const { return foo; }
};
union Bar{
Foo fBar;
double dBar;
};
Je crois que cela est tout à fait légale en C++. http://en.cppreference.com/w/cpp/language/union#Explanation dit:
If two union members are standard-layout types, it's well-defined to examine their common subsequence on any compiler
Et ainsi in gcc I can do this:
Bar bar = { Foo() }
Lorsque je tente dans Visual Studio 2008 je reçois l'erreur:
error C2620: member
Bar::fBar
ofunion Bar
has user-defined constructor or non-trivial default constructor
Error C2620 états:
A union member cannot have a default constructor.
Que se passe-t-il ici? Était-ce toujours une exigence C++, je pensais que la mise en page standard était la seule exigence? Y a-t-il un travail pour ça?
VS2008 ne comprend pas un compilateur C++ 11. Vous aurez besoin de mettre à niveau si vous voulez utiliser les fonctionnalités de langage introduites en C++ 11 –
J'irais avec la mise à jour 3 de 2015 si vous voulez obtenir la plus grande conformité C++ 11 possible. – NathanOliver
@CaptainObvlious Ce n'était pas une fonctionnalité C++ 11, Et l'erreur est toujours répertoriée dans Visual Studio 2013: https://msdn.microsoft.com/en-us/library/43ae0055(v=vs.120). aspx –