Просто баг в cs 2.0 компиляторе
От: Александр Малафеев Россия http://www.meet-tech.com
Дата: 19.04.07 17:47
Оценка: 26 (3)
Привет,

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);
        }
    }


А вто так работает.
Re[2]: Просто баг в cs 2.0 компиляторе
От: eag Россия  
Дата: 19.04.07 18:27
Оценка:
Причем ошибка появляется только в случае "<". Можеть быть эот оператор как-то перегружен, отсюда неоднозначность? Пока ничего не удалось раскопать. Может знатоки sscli подскажут?
Три великие достоинства программиста: лень, нетерпение, надменность... Л. Уолл
Re[3]: Просто баг в cs 2.0 компиляторе
От: Александр Малафеев Россия http://www.meet-tech.com
Дата: 19.04.07 18:38
Оценка:
Здравствуйте, eag, Вы писали:

eag>Причем ошибка появляется только в случае "<". Можеть быть эот оператор как-то перегружен, отсюда неоднозначность? Пока ничего не удалось раскопать. Может знатоки sscli подскажут?


Ошибка возникает потому что компилятор считает что a<b, c > — это объявление generic типа (синтаксически это оно и есть ).
Поэтому и говорит что тип b не найден...
Re[4]: Просто баг в cs 2.0 компиляторе
От: eag Россия  
Дата: 19.04.07 18:50
Оценка:
Здравствуйте, Александр Малафеев, Вы писали:

АМ>Здравствуйте, eag, Вы писали:


eag>>Причем ошибка появляется только в случае "<". Можеть быть эот оператор как-то перегружен, отсюда неоднозначность? Пока ничего не удалось раскопать. Может знатоки sscli подскажут?


АМ>Ошибка возникает потому что компилятор считает что a<b, c > — это объявление generic типа (синтаксически это оно и есть ).

АМ>Поэтому и говорит что тип b не найден...

Ну да не заметил Ну а как такую неоднозначность определять в таком случае?
Три великие достоинства программиста: лень, нетерпение, надменность... Л. Уолл
Re[5]: Просто баг в cs 2.0 компиляторе
От: eag Россия  
Дата: 19.04.07 18:53
Оценка:
Впринципе можно по лучшей сигнатуре метода, но видимо такое не реализовано.
Три великие достоинства программиста: лень, нетерпение, надменность... Л. Уолл
Re: Просто баг в cs 2.0 компиляторе
От: _FRED_ Черногория
Дата: 20.04.07 08:00
Оценка: +1
Здравствуйте, Александр Малафеев, Вы писали:

АМ>int blah = F(a<b, c >> 2);// compilation error :)


Где-то в спецификации точно был пункт, оговаривающий данный case. Но, как-то, найти не удаётся…
... << RSDN@Home 1.2.0 alpha rev. 675>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Re[2]: Просто баг в cs 2.0 компиляторе
От: Алексей.  
Дата: 20.04.07 08:20
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Где-то в спецификации точно был пункт, оговаривающий данный case. Но, как-то, найти не удаётся…


9.2.3. Но там, к сожалению, этот случай не специфицирован.
Re[3]: Просто баг в cs 2.0 компиляторе
От: Алексей.  
Дата: 20.04.07 08:23
Оценка: +1
Здравствуйте, Алексей., Вы писали:

А>9.2.3. Но там, к сожалению, этот случай не специфицирован.


Хотя не, вру. Это все-таки баг.
Re[2]: Просто баг в cs 2.0 компиляторе
От: Andrew_ImP  
Дата: 20.04.07 08:32
Оценка: 27 (3) +1
Здравствуйте, _FRED_, Вы писали:

_FR>Здравствуйте, Александр Малафеев, Вы писали:


_FR>
АМ>>int blah = F(a<b, c >> 2);// compilation error :)
_FR>


_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.


Компилятор немного не соответствует стандарту.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.