Шаблонная неоднозначность C++

Я думаю, вы вызвали getActivity().startActivityForResult(intent,111);. Вы должны называть startActivityForResult(intent,111);.

7
задан LogicStuff 22 December 2015 в 12:34
поделиться

4 ответа

AFAIK это было бы скомпилировано как new A<b>(c) > d. Это - единственный разумный способ проанализировать его, по моему скромному мнению. Если бы синтаксический анализатор не может принять при нормальных обстоятельствах a>, заканчивают аргумент шаблона, который закончился бы он намного больше неоднозначности. Если Вы хотите это другой путь, необходимо было записать:

new A<(b > c)>(d);
6
ответ дан 6 December 2019 в 14:12
поделиться

Как указано 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"
6
ответ дан 6 December 2019 в 14:12
поделиться

Стандарт C++ определяет это если для шаблонного имени, сопровождаемого a <, < всегда начало списка аргумента шаблона и невложенного первого > взят в качестве конца списка аргумента шаблона.

Если Вы предназначили что результат > оператор быть аргументом шаблона, затем необходимо было бы включить выражение в круглые скобки. Вам не нужны круглые скобки, если аргументом была часть a static_cast<> или другое выражение шаблона.

3
ответ дан 6 December 2019 в 14:12
поделиться

Жадность лексического анализатора является, вероятно, определяющим фактором в отсутствие круглых скобок для создания этого явным. Я предположил бы, что лексический анализатор не является жадным.

0
ответ дан 6 December 2019 в 14:12
поделиться
Другие вопросы по тегам:

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