语境:
在 C++ 中,可以创建对“未知边界数组”的引用。
例子:const char (&)[]
在 C++20 之前,clang(14.x、18.x)不允许您将对已知边界的数组的引用强制转换为对未知边界的数组的引用,并且会失败并出现错误:
对不完整类型“const char[]”的引用无法绑定到类型“const char[5]”的左值
对于 C++20,clang 现在允许这样做。
另一方面,gcc 一直允许这样做,一直追溯到 C++98。
问题:
- 这仅仅是标准上的分歧吗?
- 其中一个人是不是搞错了?
- C++20 是否改变或澄清了标准以使其更加明确有效?
例子
https://godbolt.org/z/66sh8a5z1
int main() {
using StringLitRef = const char (&)[];
StringLitRef array = "derp"; // works on g++ for any standard and clang with c++20
return 0;
}
这是P0388R4(允许转换为未知边界的数组),它在科隆会议(2019 年 7 月)上为 C++20 被采纳。