Здравствуйте, remark, Вы писали:
R>Не может работать и вариант, который работает :) R>Что бы всё заработало замени "object->" на "object." ;)
это я ошибся в записи Object object. На самом деле там Object* object...
Хотя если все в принципе правильно, то возможно это Borland'овские __property так немогут. Потому что на самом деле Object выглядит так:
class SomeObject : public TObject {
__property Nullable<int> parentId = { read = parentId_, write = parentId_ };
__property Nullable<AnsiString> name = { read = name_, write = name_ };
...
};
Думал что это должно быть прозрачно.
Здравствуйте, remark, Вы писали:
EA>>дальше так: EA>>
EA>>caption = ( ... ) ? DEF_STR : object->name; // (2) не работает: Two operands must evaluate to the same type
EA>>
EA>>Вопрос: как сделать чтобы работало 1 и 2? EA>>Спасибо.
R>Не может работать и вариант, который работает R>Что бы всё заработало замени "object->" на "object." R>А так на msvc7.1 всё компилируется нормально.
А не должно
во втором неоднозначность преобразования (возможно и к String и к Nullable<String>).
Здравствуйте, night beast, Вы писали:
NB>Здравствуйте, remark, Вы писали:
EA>>>дальше так: EA>>>
EA>>>caption = ( ... ) ? DEF_STR : object->name; // (2) не работает: Two operands must evaluate to the same type
EA>>>
EA>>>Вопрос: как сделать чтобы работало 1 и 2? EA>>>Спасибо.
R>>Не может работать и вариант, который работает R>>Что бы всё заработало замени "object->" на "object." R>>А так на msvc7.1 всё компилируется нормально.
NB>А не должно NB>во втором неоднозначность преобразования (возможно и к String и к Nullable<String>).
в абстрактном языке с++ iso/iec действительно не должно
однако язык с++ msvc7.1 это позволяет. хотя такие тонкие моменты они обычно не документируют, можно предположить, что преобразование третьего аргумента в тип второго имеет преимущество над преобразованием второго в тип третьего...
Здравствуйте, remark, Вы писали:
NB>>А не должно NB>>во втором неоднозначность преобразования (возможно и к String и к Nullable<String>).
R>в абстрактном языке с++ iso/iec действительно не должно R>однако язык с++ msvc7.1 это позволяет. хотя такие тонкие моменты они обычно не документируют, можно предположить, что преобразование третьего аргумента в тип второго имеет преимущество над преобразованием второго в тип третьего...
ладно, скажем так язык с++ Comeau 4.3.8 на него ругается.
победить можно сделав конструктор explicit Nullable(const T& other); (надо при этом понимать последствия такого шага)
R>
Здравствуйте, night beast, Вы писали:
NB>Здравствуйте, remark, Вы писали:
NB>>>А не должно NB>>>во втором неоднозначность преобразования (возможно и к String и к Nullable<String>).
R>>в абстрактном языке с++ iso/iec действительно не должно R>>однако язык с++ msvc7.1 это позволяет. хотя такие тонкие моменты они обычно не документируют, можно предположить, что преобразование третьего аргумента в тип второго имеет преимущество над преобразованием второго в тип третьего...
NB>ладно, скажем так язык с++ Comeau 4.3.8 на него ругается. NB>победить можно сделав конструктор explicit Nullable(const T& other); (надо при этом понимать последствия такого шага)
не очень красиво.
NB>>во втором неоднозначность преобразования (возможно и к String и к Nullable<String>).
А что в инструкции A = (...) ? B : C; типы B и C не должны приводится к типу A? Просто не совсем понятно в чем смысл преодразования типа B в С или С в B.
Здравствуйте, eric.av, Вы писали:
NB>>>во втором неоднозначность преобразования (возможно и к String и к Nullable<String>). EA>А что в инструкции A = (...) ? B : C; типы B и C не должны приводится к типу A? Просто не совсем понятно в чем смысл преодразования типа B в С или С в B.
Конструкции (...) ? B : C нет.
есть конструкция (...) ? T : T. (то есть или B должно приводиться к С или С к B)
К чему потом будет приводиться T -- это уже второй вопрос.
Здравствуйте, night beast, Вы писали:
NB>Здравствуйте, eric.av, Вы писали:
NB>>>>во втором неоднозначность преобразования (возможно и к String и к Nullable<String>). EA>>А что в инструкции A = (...) ? B : C; типы B и C не должны приводится к типу A? Просто не совсем понятно в чем смысл преодразования типа B в С или С в B.
NB>Конструкции (...) ? B : C нет. NB>есть конструкция (...) ? T : T. (то есть или B должно приводиться к С или С к B) NB>К чему потом будет приводиться T -- это уже второй вопрос.
Ещё можно добавить, что конструкции A = (...) ? T : T тоже нет. Т.е. full-expression вполне может быть просто вида:
С ? E1 : E2;
без всяких дальнейших преобразований и использований результата вычисления E1 (или E2).
Но даже тут E1 и E2 всё равно должны однозначно приводится к одному типу.