Vai*_*Man 8 c++ type-traits c++20
正如标题中提到的:
#include <type_traits>
int main() {
using Ptr = const void*;
using Arr = Ptr[3];
// gcc: passed since c++20
// clang: failed
static_assert(std::is_copy_constructible_v<Arr>);
}
Run Code Online (Sandbox Code Playgroud)
https://godbolt.org/z/enKre9fxr
c++20 中是否发生了导致此行为的更改?
我还发现此错误报告被标记为无效,因为
这是按照指定的方式运行的。
Run Code Online (Sandbox Code Playgroud)const void* const a[10]; const void* const b[10](a);是 C++20 中的有效代码;它
b[0]使用&a[0]转换为 a进行初始化const void*,其余部分b使用空指针。案例
void*是Run Code Online (Sandbox Code Playgroud)void* const a[10]; void* const b[10](a);这是无效的,因为
&a[0]是 avoid* const*;void*不允许将其转换为,因为它会消除常量性。
然后我尝试了这个https://godbolt.org/z/zvTr4orvd。然而GCC无法编译b(a)。b{a}没问题,但我认为这不是复制构造,而是列表初始化。我错了吗?
const void* const a[10];
const void* const b[10](a);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
156 次 |
| 最近记录: |