лязг 3,6 раза выражение влево / вправо

c++ clang clang++ c++17

251 просмотра

1 ответ

2265 Репутация автора

Я пробую выражение сгиба с помощью 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? Спасибо

Автор: Ralph Zhang Источник Размещён: 02.03.2015 08:32

Ответы (1)


6 плюса

89132 Репутация автора

Решение

n4191 был пересмотрен n4295 . В соответствии с этим, выражение формы (e op ...)является одинарным правым сгибом , и оно расширяется как:, E1 op (... op (EN-1 op EN))т.е. как правое сгибание.

Похоже, это противоположно тому, что было указано в n4191 относительно направления сгиба. Clang 3.6 реализует предложение n4295, как показано здесь .

... - argsбудет унарный левый сгиб и расширится в нужном вам направлении.

Автор: interjay Размещён: 02.03.2015 09:04
Вопросы из категории :
32x32