关于char-array向量的C++ GCC 4.3.2错误

mar*_*tin 1 c++ arrays destructor vector

问题类似于这个bug

关于在C++中将数组存储在std :: vector中的问题

但出于不同的原因(见下文).

对于C++中的以下示例程序:

#include <vector>

int main(int c_, char ** v_)
{
        const int LENGTH = 100;

        std::vector<char[LENGTH]> ca_vector;

        return 0;

}
Run Code Online (Sandbox Code Playgroud)

GCC 4.2.3编译干净.GCC 4.3.2发出以下错误:

/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]’

原因显然是这一点

include/g++-v4/bits/stl_construct.h 

  template
    inline void
    _Destroy(_Tp* __pointer)
    { __pointer->~_Tp(); }
Run Code Online (Sandbox Code Playgroud)

我认为,由于不正确的数组到指针衰减而被称为.

我的问题是: 语言标准中是否存在阻止std :: vector中存储数组的内容?或者它只是那个特殊GCC版本的错误?

我相信这应该编译(即4.2.3是正确的).

谢谢马丁

use*_*019 6

是的,标准中有一些东西停止使用数组使用Draft C++ 98 Standard

第23节容器

存储在这些组件中的对象类型必须满足CopyConstructible类型(20.1.3)的要求,以及Assignabletypes的其他要求.

组件是各种容器

20.1.3包括类型必须具有析构函数的要求.

我认为它作为向量必须复制分配和删除元素.C++如何知道复制或删除char []?