![](/img/trans.png)
[英]Apple Clang: can't compile call to std::erase for vector with custom allocator
[英]Apple's clang can't use <=> with std::tuple
以下代碼在 GCC 和godbolt上編譯得很好,但在我的 MacBook 上,在 Xcode 14 中它死了:
#include <iostream>
#include <compare>
#include <tuple>
using std::cout; using std::tuple; using std::endl;
int main() {
tuple<float, float> tuplee = {1.0,2.0};
tuple<float, float> tuploo = {3.0,4.0};
cout << (tuplee < tuploo) << endl;
auto res = (tuplee <=> tuploo);
cout << (res < 0) << endl;
return 0;
}
錯誤是:
二進制表達式的無效操作數('std::tuple<float, float>' 和 'std::tuple<float, float>')
它指向元組上的<=>
。 你認為這是 Apple 的 clang 中的錯誤,還是我遺漏了什么?
我的 MacBook 上的命令行:
% clang++ --version
Apple clang version 14.0.0 (clang-1400.0.29.102)
Target: x86_64-apple-darwin22.1.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
% clang++ -std=c++2b main.cpp
main.cpp:11:21: error: invalid operands to binary expression ('tuple<float, float>' and 'tuple<float, float>')
cout << (tuplee <=> tuploo) << endl;
~~~~~~ ^ ~~~~~~
1 error generated.
我認為這是一個錯誤。 該錯誤已在 llvm 中修復( 相關更改)。 但是通過檢查 Macos SDK 中的元組頭,可以發現蘋果沒有為元組實現 <=> 。
該錯誤還影響 Macos 的 arm64 變體。 我的 Mac 上的 Clang 版本:
➜ test clang --version
Apple clang version 14.0.0 (clang-1400.0.29.202)
Target: arm64-apple-darwin22.2.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
附言。 自制 llvm@14 編譯正常。 只是不要使用 apple clang
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.