Я думаю, вы вызвали getActivity().startActivityForResult(intent,111);
. Вы должны называть startActivityForResult(intent,111);
.
AFAIK это было бы скомпилировано как new A<b>(c) > d
. Это - единственный разумный способ проанализировать его, по моему скромному мнению. Если бы синтаксический анализатор не может принять при нормальных обстоятельствах a>, заканчивают аргумент шаблона, который закончился бы он намного больше неоднозначности. Если Вы хотите это другой путь, необходимо было записать:
new A<(b > c)>(d);
Как указано Leon & Lee, 14.2/3 (C++ '03) явно определяет это поведение.
C++ '0x добавляет к забаве с подобным применением к правила >>
. Фундаментальное понятие, то, что при парсинге шаблонного списка аргументов a, не вложенного >>
будет рассматриваться как два отличных >
>
маркеры а не оператор сдвига вправо:
template <bool>
struct A {
A(bool);
A(void*);
};
template <typename T>
class C
{
public:
C (int);
};
int main() {
A<true> *d = 0;
const int b = 2;
const int c = 1;
new C <A< b >> (c) > (d); // #1
new C <A< b > > (c) > (d); // #2
}
'#1' и '#2' эквивалентны в вышеупомянутом.
Это, конечно, фиксирует то раздражение с необходимостью добавить пробелы во вложенных специализациях:
C<A<false>> c; // Parse error in C++ '98, '03 due to "right shift operator"
Стандарт C++ определяет это если для шаблонного имени, сопровождаемого a <
, <
всегда начало списка аргумента шаблона и невложенного первого >
взят в качестве конца списка аргумента шаблона.
Если Вы предназначили что результат >
оператор быть аргументом шаблона, затем необходимо было бы включить выражение в круглые скобки. Вам не нужны круглые скобки, если аргументом была часть a static_cast<>
или другое выражение шаблона.
Жадность лексического анализатора является, вероятно, определяющим фактором в отсутствие круглых скобок для создания этого явным. Я предположил бы, что лексический анализатор не является жадным.