Ошибочка в операторе type
От: Аноним  
Дата: 03.04.10 21:48
Оценка:
Этот код не компилируется:

public class Foo[T] where T : System.IComparable {}

type I = int;

type Bar = Foo[I];


Компилятор считает, что I не реализует интерфейс IComparable. Но I это int, а int реализует IComparable.

На багтрекер уже запостил.
Re: Ошибочка в операторе type
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.04.10 16:35
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Этот код не компилируется:


А>
А>public class Foo[T] where T : System.IComparable {}

А>type I = int;

А>type Bar = Foo[I];
А>


А>Компилятор считает, что I не реализует интерфейс IComparable. Но I это int, а int реализует IComparable.


Я попытался воспроизвести этот баг и он воспроизвелся только в IDE. Компилятор код съедает без проблем.

Это только у меня?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Ошибочка в операторе type
От: seregaa Ниоткуда http://blogtani.ru
Дата: 04.04.10 17:15
Оценка:
Здравствуйте, VladD2, Вы писали:

А>>Компилятор считает, что I не реализует интерфейс IComparable. Но I это int, а int реализует IComparable.


VD>Я попытался воспроизвести этот баг и он воспроизвелся только в IDE. Компилятор код съедает без проблем.

VD>Это только у меня?

Странное дело, при копиляции из студии компиляция завершается успешно — в статусной строке появляется сообщение "Build succeeded".

Ошибка появляется при построении интеграцией дерева типов — после появления в статусной строке сообщения "Building types tree is completed".
Мобильная версия сайта RSDN — http://rsdn.org/forum/rsdn/6938747
Автор: sergeya
Дата: 19.10.17
Re[2]: Ошибочка в операторе type
От: seregaa Ниоткуда http://blogtani.ru
Дата: 04.04.10 17:18
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Я попытался воспроизвести этот баг и он воспроизвелся только в IDE. Компилятор код съедает без проблем.

VD>Это только у меня?

Если вынести строку type Bar = Foo[I]; в отдельный файл, то ошибка в студии исчезнет.
Мобильная версия сайта RSDN — http://rsdn.org/forum/rsdn/6938747
Автор: sergeya
Дата: 19.10.17
Re[3]: Ошибочка в операторе type
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.04.10 17:33
Оценка:
Здравствуйте, seregaa, Вы писали:

S>Странное дело, при копиляции из студии компиляция завершается успешно — в статусной строке появляется сообщение "Build succeeded".


S>Ошибка появляется при построении интеграцией дерева типов — после появления в статусной строке сообщения "Building types tree is completed".


Проще смотреть на окно Output. В него выводится только вывод компилятора.

Похоже какие-то проблемы с генерируемыми индентификаторами в компиляторе. Вылезают они только в интеграции по всей видимости потому что в ней компилятор запускается множество раз. Будет разбираться...
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Ошибочка в операторе type
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.04.10 22:20
Оценка:
Здравствуйте, seregaa, Вы писали:

VD>>Я попытался воспроизвести этот баг и он воспроизвелся только в IDE. Компилятор код съедает без проблем.

VD>>Это только у меня?

S>Если вынести строку type Bar = Foo[I]; в отдельный файл, то ошибка в студии исчезнет.


Как выяснилось, достаточно просто переставить объявления type местами, чтобы все заработало.

На лицо очередной косяк дизайна в компиляторе. Получается, что есть зависимость между временем обработки алиасов. Если к моменту разрешения ссылки на алиас это алиас еще связан, компилятор работает не верно.

Собственно интеграция отличается от компилятора только тем, что в ней (похоже) типы обрабатываются в другом порядке. Это предположение подтверждается тем, что алиасы будучи переставленными местами не компилируются даже компилятором командной строки.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Ошибочка в операторе type
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.04.10 01:26
Оценка:
Здравствуйте, Аноним, Вы писали:

А>На багтрекер уже запостил.


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