class Foo {
public int F(bool a, int b)
{
return 2;
}
public void runTest()
{
int a = 5;
int b = 6;
int c = 7;
int blah = F(a<b, c >> 2);// compilation error :)
Console.WriteLine("Blah = " + blah);
}
}
Re: Просто баг в cs 2.0 компиляторе
От:
Аноним
Дата:
19.04.07 18:17
Оценка:
Здравствуйте, Александр Малафеев, Вы писали:
class Foo
{
public int F(bool a, int b)
{
return 2;
}
public void runTest()
{
int a = 5;
int b = 6;
int c = 7;
int blah = F((a<b), c >> 2);// compilation error :)
Console.WriteLine("Blah = " + blah);
}
}
Причем ошибка появляется только в случае "<". Можеть быть эот оператор как-то перегружен, отсюда неоднозначность? Пока ничего не удалось раскопать. Может знатоки sscli подскажут?
Три великие достоинства программиста: лень, нетерпение, надменность... Л. Уолл
Здравствуйте, eag, Вы писали:
eag>Причем ошибка появляется только в случае "<". Можеть быть эот оператор как-то перегружен, отсюда неоднозначность? Пока ничего не удалось раскопать. Может знатоки sscli подскажут?
Ошибка возникает потому что компилятор считает что a<b, c > — это объявление generic типа (синтаксически это оно и есть ).
Поэтому и говорит что тип b не найден...
Здравствуйте, Александр Малафеев, Вы писали:
АМ>Здравствуйте, eag, Вы писали:
eag>>Причем ошибка появляется только в случае "<". Можеть быть эот оператор как-то перегружен, отсюда неоднозначность? Пока ничего не удалось раскопать. Может знатоки sscli подскажут?
АМ>Ошибка возникает потому что компилятор считает что a<b, c > — это объявление generic типа (синтаксически это оно и есть ). АМ>Поэтому и говорит что тип b не найден...
Ну да не заметил Ну а как такую неоднозначность определять в таком случае?
Три великие достоинства программиста: лень, нетерпение, надменность... Л. Уолл
_FR>Где-то в спецификации точно был пункт, оговаривающий данный case. Но, как-то, найти не удаётся…
Да, ты совершенно прав, но это баг.
Пункт 9.2.3 Grammar ambiguities
The statement:
F(G<A, B>(7));
will, according to this rule, be interpreted as a call to F with one argument, which is a call to a generic method G with two type arguments and one regular argument.
The statements:
F(G<A, B>7);
F(G<A, B>>7);
will each be interpreted as a call to F with two arguments.