J'utilise Visual Studio 2008 avec la bibliothèque Boost v1.42.0. Si j'utilise un enum comme argument du modèle, j'obtiens une erreur de compilation lorsque j'ajoute une valeur à l'aide de la commande push_back()
. L'erreur du compilateur est la suivante : 'T': is not a legal base class
et la localisation de l'erreur est move.hpp
ligne 79.
#include <boost/interprocess/containers/vector.hpp>
class Test {
public:
enum Types {
Unknown = 0,
First = 1,
Second = 2,
Third = 3
};
typedef boost::container::vector<Types> TypesVector;
};
int main() {
Test::TypesVector o;
o.push_back(Test::First);
return 0;
}
Si j'utilise un std::vector
au lieu de cela, cela fonctionne. Et si je redimensionne d'abord la version Boost et que je définis ensuite les valeurs à l'aide de la fonction []
L'opérateur fonctionne également.
Existe-t-il un moyen de faire fonctionner ce système en utilisant push_back()
?
Template backtrace de l'erreur :
error C2516: 'T' : is not a legal base class
1> main.cpp(21) : see declaration of 'T'
1> main.cpp(21) : see reference to class template instantiation 'boost::interprocess::rv' being compiled
1> with
1> \[
1> T=Test::Types
1> \]