問題はこのバグに似ています
C++のstd::vectorに配列を格納することに関する質問
しかし、別の理由で(以下を参照)。
C ++の次のサンプルプログラムの場合:
#include <vector>
int main(int c_, char ** v_)
{
const int LENGTH = 100;
std::vector<char[LENGTH]> ca_vector;
return 0;
}
GCC4.2.3はきれいにコンパイルされます。GCC 4.3.2は、次のエラーを発行します。
/usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4/bits/stl_construct.h:関数内'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:'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:'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:'std :: vector ::〜vector()からインスタンス化[with _Tp = char [100]、_ Alloc = std :: allocator] ' test.cpp:7:ここからインスタンス化 /usr/lib/gcc/i686-pc-linux-gnu/4.3.2/include/g++-v4/bits/stl_construct.h:88:エラー:'*__pointer'のメンバー'〜char[100]'のリクエスト、非クラスタイプ'char[100]'
理由はどうやらこのビットにあります
include / g ++-v4 / bits / stl_construct.h
template
inline void
_Destroy(_Tp* __pointer)
{ __pointer->~_Tp(); }
これは、配列からポインタへの減衰が正しくないために呼び出されると思います。
私の質問は: std :: vectorでの配列の保存を妨げる言語標準に何かありますか?それとも、その特別なGCCバージョンの単なるバグですか?
私はこれがコンパイルされるべきだと信じています(つまり4.2.3が正しい)。
ありがとうマーティン