gpt4 book ai didi

c++ - C++ 20 [[no_unique_address]]在GCC中的错误?

转载 作者:行者123 更新时间:2023-12-02 09:59:59 26 4
gpt4 key购买 nike

C++ 20引入了新属性 [[no_unique_address]] ,它指示数据成员不必具有与该类的所有其他非静态数据成员不同的地址。
因此,我尝试使用此新属性来实现我自己的 vector ,该 vector 将分配器作为类成员:

#include <memory>

template <typename T, class Allocator = std::allocator<T>>
class vector {
T* begin_;
[[no_unique_address]] Allocator alloc_;
public:
vector() = default;
vector(const vector& other)
: begin_(other.begin_),
alloc_(std::allocator_traits<Allocator>::select_on_container_copy_construction(other.alloc_))
{ }
};
但是当我调用复制构造函数时:
vector<int> v;
vector v2(v);
GCC发生内部编译错误:
<source>: In copy constructor 'vector<T, Allocator>::vector(const vector<T, Allocator>&) [with T = int; Allocator = std::allocator<int>]':
<source>:11:99: internal compiler error: in assign_temp, at function.c:984
11 | alloc_(std::allocator_traits<Allocator>::select_on_container_copy_construction(other.alloc_))
| ^
Please submit a full bug report,
with preprocessed source if appropriate.

But the clang and MSVC can both compile correctly这是一个GCC错误吗?
更新:当我将标志 -O2用于GCC时,内部编译器错误神奇地消失了。

最佳答案

So is this a GCC bug?


可能吧 internal compiler error并不意味着编译后的代码中存在错误。不管代码是否正确,ICE可能是编译器错误,也可能是损坏的安装。

关于c++ - C++ 20 [[no_unique_address]]在GCC中的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63115694/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com