Apple的clang不能将<=>与std::tuple一起使用



下面的代码在godbolt上用GCC和clang编译得很好,但在我的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>"one_answers"std::tuple<float>"(

它指向元组上的<=>。你认为这是苹果叮当声中的一个bug,还是我遗漏了什么?

我的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

PS。自制啤酒llvm@14编译良好。只是不要使用苹果叮当

最新更新