c++ - clang 左/右 3.6 倍表达式

标签 c++ clang clang++ c++17

我正在尝试使用 clang 3.6 '--std=c++1z' 的折叠表达式,但我不太明白。我正在测试的功能是:

auto minus = [](auto... args) { return (args - ...); };
...
std::cout << minus(10, 3, 2) << std::endl;

根据 n4191 , 我期待它扩展为左折叠到

(10 - 3) - 2

给出结果 5,然而,结果是 9,这似乎是一个正确的折叠展开,即

10 - (3 - 2)

我是否遗漏了什么或误解了 n4191? 谢谢

最佳答案

n4191 由 n4295 修订.据此,(e op ...) 形式的表达式是一个一元右折叠,它被扩展为:E1 op (.. .op (EN-1 op EN)),即作为右折叠展开。

这似乎与 n4191 所说的折叠方向相反。 Clang 3.6 实现了 n4295 提案,如图所示 here .

... - args 将是一个一元左折叠 并向您想要的方向扩展。

关于c++ - clang 左/右 3.6 倍表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28805431/

相关文章:

C++ Boost 对字符串的使用

c++ pow(2,1000) 通常对于 double 来说很大,但它正在工作。为什么?

clang - 运行多个 clang pass

compiler-construction - 如何创建非插件 LLVM pass?

c++ - realloc() 的性能消耗

c++ - 从命令行而非 Xcode 编译时为 "error: expected expression"

c++ - 与 unique_ptr 配对的正确方法是什么?

c++ - clang 和 clang++ 与 ASAN 生成不同的输出

c++ - 是否可以在 C++11 中指定枚举的位宽?