I saw <?= and >?= used in a code: http://community.topcoder.com/stat?c=problem_solution&rm=151152&rd=5854&pm=2923&cr=310333
I tried to compile without the includes to test if it's standard, but it didn't work. I then added the includes, but it still gives the same error:
question-mark.cpp:15:5: error: expected primary-expression before ‘?’ token question-mark.cpp:15:6: error: expected primary-expression before ‘=’ token question-mark.cpp:15:9: error: expected ‘:’ before ‘;’ token question-mark.cpp:15:9: error: expected primary-expression before ‘;’ token
#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
int main()
{
int x = 3;
int y = 2;
x >?= y;
printf("x = %d\n", x);
return 0;
}
Here's how it is used in the code from the link:
x <?= h[i][j]; // x = (h[i][j] < x) ? h[i][j] : x;
How can I make this work?
These are GCC extensions operators.
a <?= b
has the same meaning asa = min(a, b)
(>?=
is the "max" operator), but it evaluates its left-hand side expression only once. This is not important whena
is a variable, but it may make a difference whena
represents an expression, especially when the expression has a side effect. For example, inthe
++
indest++
would be evaluated only once.Both operators have now been deprecated.
It's a GCC extension.
x >?= y
is equivalent to:I haven't seen it used in a while though.