std::vector<int, std::allocator<char> > 有效吗?
Is std::vector<int, std::allocator<char> > valid?
标准没有提到 std::vector
的分配器,只要求分配器满足 Allocator
的概念。没有关于分配器的 value_type,没有 reference_type,没有什么。
我认为 std::vector<T, A>
在内部将 A
重新绑定到 T
的分配器,所以我提供了一个向量 std::allocator<char>
,它按预期工作。
但是,如果给出 std::allocator<void>
,GCC 会产生错误,如下所示:
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.2/include/g++-v4/ext/alloc_traits.h: In instantiation of ‘struct __gnu_cxx::__alloc_traits<std::allocator<void> >’:
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.2/include/g++-v4/bits/stl_vector.h:75:28: required from ‘struct std::_Vector_base<int, std::allocator<void> >’
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.2/include/g++-v4/bits/stl_vector.h:214:11: required from ‘class std::vector<int, std::allocator<void> >’
a.cpp:5:42: required from here
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.2/include/g++-v4/ext/alloc_traits.h:109:53: error: forming reference to void
typedef value_type& reference;
^
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.2/include/g++-v4/ext/alloc_traits.h:110:53: error: forming reference to void
typedef const value_type& const_reference;
^
这是 GCC 的错误吗?还是我误读了标准?
- GCC 版本:4.9.2
不,这是不允许的。第一行 table 99:
标准没有提到 std::vector
的分配器,只要求分配器满足 Allocator
的概念。没有关于分配器的 value_type,没有 reference_type,没有什么。
我认为 std::vector<T, A>
在内部将 A
重新绑定到 T
的分配器,所以我提供了一个向量 std::allocator<char>
,它按预期工作。
但是,如果给出 std::allocator<void>
,GCC 会产生错误,如下所示:
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.2/include/g++-v4/ext/alloc_traits.h: In instantiation of ‘struct __gnu_cxx::__alloc_traits<std::allocator<void> >’:
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.2/include/g++-v4/bits/stl_vector.h:75:28: required from ‘struct std::_Vector_base<int, std::allocator<void> >’
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.2/include/g++-v4/bits/stl_vector.h:214:11: required from ‘class std::vector<int, std::allocator<void> >’
a.cpp:5:42: required from here
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.2/include/g++-v4/ext/alloc_traits.h:109:53: error: forming reference to void
typedef value_type& reference;
^
/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.2/include/g++-v4/ext/alloc_traits.h:110:53: error: forming reference to void
typedef const value_type& const_reference;
^
这是 GCC 的错误吗?还是我误读了标准?
- GCC 版本:4.9.2
不,这是不允许的。第一行 table 99: