Передать многострочный аргумент с помощью xargs

В этом стандарте нет ничего удивительного. Все, что мы слышим о переобучении, это:

[C++11: 3.1/1]: Объявление (раздел 7) может вводить одно или несколько имен в единицы перевода или имена редизайна, введенные предыдущими объявлениями. [..]

и единственная соответствующая часть семантики auto:

[C++11: 7.1.6.4/3]: В противном случае, тип переменной выводится из ее инициализатора. [..]

(напоминая нам, что тип x равен int).

Мы знаем, что переменная должен быть задан одним и тем же типом всеми объявлениями:

[C++11: 3.5/10]: После всех настроек типов (в течение которых typedefs (7.1.3) заменяются их определениями), типы, указанные всеми объявлениями обращение к данной переменной или функции должно быть идентичным, за исключением того, что объявления для объекта массива могут указывать типы массивов, которые отличаются наличием или отсутствием главной привязки массива (8.3.4). Нарушение этого правила по типу идентичности не требует диагностики.

, а «после всех настроек типов» должен заботиться о любых вопросах, касающихся участия auto во всех этого; моя интерпретация заключается в том, что это по сути является действительным переопределением (и определением) x в глобальной области видимости с типом int и что Clang является правильным. Даже если мы предположим, что auto не считается «настройкой типа», так как никакой диагностики не требуется, в худшем случае все перечисленные реализации совместимы по-своему.

Я считаю, что GCC и Visual Studio принимают во внимание следующее:

[C++11: 7.1.6.4/5]: Программа, использующая auto в контексте, явно не разрешенном в этом разделе, плохо сформирована.

& hellip, но я думаю, что это недальновидно. Кажется маловероятным, что стандартный язык предназначен для запрета обычных правил повторной записи только потому, что они не повторяются или явно не упоминаются из 7.1.6.4.

В C ++ 14 добавлена ​​формулировка, относящаяся к объявлениям функции с выведенными типами:

[C++14: 7.1.6.4/13]: Редекларации или специализации шаблона функции или функции с объявленным типом возвращаемого типа, который использует тип заполнителя, также должны использовать этот заполнитель, а не выведенный тип. [..]

По симметрии можно предположить, что в вашем случае int предполагается, что GCC и VS будут правильно отклонять программу. Однако это другая функция (поскольку вычет не может быть применен к простым объявлениям) и, следовательно, другой сценарий.

В любом случае, улучшенная стандартная формулировка поможет здесь. Я считаю это [разумно незначительным] редакторским дефектом.

0
задан viktorkho 16 January 2019 в 14:06
поделиться

1 ответ

Будет ли это работать?

zabbix_sender -z 127.0.0.1 -s testhost -k llditem -o "`myprogram`"

Если вы настаиваете на использовании xargs, чтобы сделать именно это, то используйте -0:

myprogram | xargs -0 -I{} zabbix_sender -z 127.0.0.1 -s testhost -k llditem -o "'{}'"
0
ответ дан Ole Tange 16 January 2019 в 14:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: