调用零大小、非活跃联合体成员的成员函数

问题描述 投票:0回答:1

我知道访问

union
的非活动成员是UB,但是调用零大小且琐碎的联合成员的成员函数怎么样?从技术上讲,它不是访问,所以我希望它是有效的,但我找不到关于它的确切参考。

换句话说,

[[no_unique_address]]
可以在没有EBO的C++20之前用
union
实现吗?

template<typename T>
struct MyVector {
  union {
    T* ptr{};

    // Just an example. Suppose that is_trivial<alloc> == true and is_empty_v<alloc> == true
    std::allocator<T> alloc; 
  }; 

  explicit MyVector(std::size_t size) {
    // Is this UB?
    ptr = alloc.allocate(size); 
  }
};

c++ language-lawyer
1个回答
0
投票

[basic.life]/7.2 使得在对象的生命周期开始 UB 之前调用对象上的任何非静态成员函数,无论对象或函数的任何属性如何。

© www.soinside.com 2019 - 2024. All rights reserved.