Il est similaire au problème à ce bogueC++ GCC 4.3.2 erreur sur le vecteur de char-tableau
Question about storing array in a std::vector in C++
mais pour une raison différente (voir ci-dessous).
Pour le programme exemple suivant en C++:
#include <vector>
int main(int c_, char ** v_)
{
const int LENGTH = 100;
std::vector<char[LENGTH]> ca_vector;
return 0;
}
GCC 4.2.3 proprement compile. GCC 4.3.2 émet les erreurs suivantes:
/usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4/bits/stl_construct.h: In function ‘void std::_Destroy(_Tp*) [with _Tp = char [100]]’: /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4/bits/stl_construct.h:103: instantiated from ‘void std::_Destroy(_ForwardIterator, _ForwardIterator) [with _ForwardIterator = char (*)[100]]’ /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4/bits/stl_construct.h:128: instantiated from ‘void std::_Destroy(_ForwardIterator, _ForwardIterator, std::allocator&) [with _ForwardIterator = char (*)[100], _Tp = char [100]]’ /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4/bits/stl_vector.h:300: instantiated from ‘std::vector::~vector() [with _Tp = char [100], _Alloc = std::allocator]’ test.cpp:7: instantiated from here /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4/bits/stl_construct.h:88: error: request for member ‘~char [100]’ in ‘* __pointer’, which is of non-class type ‘char [100]’
La raison est apparemment ce bit dans
include/g++-v4/bits/stl_construct.h
template
inline void
_Destroy(_Tp* __pointer)
{ __pointer->~_Tp(); }
qui est appelé, je pense que, en raison de mauvaise série à pointeur désintégration.
Ma question est: Existe-t-il quelque chose dans la norme linguistique empêchant le stockage des tableaux dans std :: vector? Ou est-ce juste un bug dans cette version spéciale de GCC? Je crois que cela devrait compiler (c'est-à-dire que 4.2.3 est correct).
Merci martin
Quelle est la raison pour laquelle vous n'utilisez pas std :: string? – kmarsh
Voulez-vous dire que votre code a été compilé et exécuté correctement dans GCC 4.2.3? – fpmurphy1
Il compile encore sur ce système, oui. Et cela semble fonctionner. – martin