Что такое <? = В С++?

Возможный дубликат:
Расширение C: <? и > ? операторов

Взгляните на главный ответ (по sclo) на проблему D этого Замятие в Google Code. Это С++-код, он должен быть скомпилирован и содержит такие выражения, как этот:

double& ret = F[mask][cur][b];
if(j==cur) {
  ret<?=f(tmp,j,b||bad[i])+M[cur][i];   // WTF is <?=   ???
}

Это не компилируется в моей Visual Studio 2008. Что означает <?=?

Ответы

Ответ 1

Это расширение gcc: расширение C: <? и > ? Операторы

Последние руководства сказать:

Минимальные и максимальные операторы g++ ('<? и' >?) и их составные формы ('<?=) и >?=) устарели и теперь удалены из g++. Код с использованием этих операторов должен быть изменен для использования std::min и std::max вместо этого...

Ответ 2

Это просто недействительно С++. < Возможно, это будет меньше, чем открытая угловая скобка для списка аргументов шаблона или начало орграфа, но не из тех, за которыми может следовать ?, затем =.

Ответ 3

Это теперь устаревшее расширение g++ для языка С++.

a <? b является минимальным, возвращая меньшие числовые значения a и b;

a >? b является максимальным, возвращая большее число числовых значений a и b.

Существуют также составные версии

<?=

и

>?=

которые также выполняют назначение.

Ответ 4

Он не компилируется также с GCC, и я никогда не слышал об операторе <?=.

В любом случае я бы поставил под угрозу, что a<?=b может иметь семантику вроде: a = (a<b) ? b : a, но опять же, это просто предположение.