![]() |
|
|
![]()
|
|
| vaddsm |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 30.6.2007 Репутация: нет Всего: нет |
тотже:
cmd:
Простите, а что у вас происходит без указания __stdcall в шаблоне, я могу поинтересоваться? Нормально компилируется и так и так?
я целый ряд различных соглашений задавал foo, fastcall часный случай. И все равно работает. |
||||||
|
|||||||
| azesmcar |
|
||||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
vaddsm
Чем дальше - тем лучше
кажется вам пора обновляться Добавлено через 2 минуты и 34 секунды
Код который вы мне показали в последнем посте с ошибками
у меня на MinGW прошел без ошибок. Это сообщение отредактировал(а) azesmcar - 26.5.2009, 23:46 |
||||||||
|
|||||||||
| vaddsm |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 30.6.2007 Репутация: нет Всего: нет |
Ну да, почему в разетку пальцем лезть низя он понимает, даже у меня
Понятно, а тот же код но с таким изменением:
Что говорит? |
||||||
|
|||||||
| vaddsm |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 30.6.2007 Репутация: нет Всего: нет |
И всеже такой формы записи
mingw'у вполне хватает чтобы в шаблоне знать тип соглашения о вызове. Проверил под отладчиком вызов метода foo декларированного с различными соглашениями:
К чему я прихожу: Стандарт не определяет формат описания calling convetions в шаблонах? |
||||
|
|||||
| azesmcar |
|
||||||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
он вообще не определяет calling convetions. я думаю так: __stdcall чисто микрософтовский кейворд и в GCC это по определению не было. Когда GCC портировали под виндоуз (minGW) __stdcall добавили. Возможно это бага старой версии.
ну мало ли..я думал там вообще с этим неполадки, если тут проверка работает, то почему не работает с шаблонами? мое мнение: Хоть стандарт и не определяет поведение программы в таких случаях - при добавлении новых фич производители компиляторов должы добавить их так - чтобы они соответствовали общей структуре и логике ЯП. В конкретном случае логично то что он не позволяет компилироватся данной программе (у меня).
вот еще вариант с шаблонами.
То что он компилует у вас - видимо просто бага - которую уже давно исправили vaddsm да..и еще..я бы с удовольствием взглянул на ассемблерный код сгенерированный для
особенно интересует вот эта часть.. (a.*M)(1, 2); тут эти два параметра push -ами идут в функцию или mov ecx ..., mov edx? сам не могу..у меня не компилируется Это сообщение отредактировал(а) azesmcar - 27.5.2009, 08:55 |
||||||||||
|
|||||||||||
| vaddsm |
|
||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 30.6.2007 Репутация: нет Всего: нет |
azesmcar, посмотри внимательнее, приведенный мною asm это как раз то о чем ты меня сейчас просишь, для 3х случаев когда
объявлена как __fastcall, __stdcall и __cdecl. Для случая с __fastcall первый параметр идет в edx, второй в стек.
Да, но я говорю не о частном случае, естественно что описаний самих соглашений в стандарте нет. Меня интересует есть ли в стандарте чтолибо относительно формата указания информации об этих соглашениях в различных синтаксических ситуациях. Добавлено через 1 минуту и 41 секунду упс, прошу прощения за "Ты". Добавлено через 5 минут и 33 секунды
Приведенный вами пример в mingw у меня не компилируется. а вот то что компилится это:
Действительно баг. Добавлено через 6 минут и 48 секунд Радует что в более поздних версиях его выпрямили. |
||||||||
|
|||||||||
| azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
да, ассемблер я увидел, но не совсем понял для какого он кода. Т.е. я думал это для обычного вызова написано а не для вызова через шаблон. следовательно он понимает как ее вызывать ну, что тут скажешь..это компилятор, все в его руках
Добавлено @ 09:28 да без проблем Это сообщение отредактировал(а) azesmcar - 27.5.2009, 09:34 |
||||
|
|||||
| vaddsm |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 30.6.2007 Репутация: нет Всего: нет |
Для нетипового шаблонного параметра типа указатель на функцию, применяется только “функция к указателю (4.3)” конверсия. Если аргумент шаблона представлен множеством перегруженных функций (или указателем на таковые), то подходящая функция выбирается из множества.
Для нетипового шаблонного параметра типа указатель на метод, конверсия не применяется. Если аргумент шаблона представлен множеством перегруженных методов (или указателем на таковые), то подходящий метод выбирается из множества. Конверсия != Конвенция Иными словами в приведенном фрагменте стандарта ничего не говорится о соглашених о вызовах. Добавлено через 8 минут и 18 секунд The C++ Standard [ISO/IEC 14882] has very little to say about calling conventions. It has a bit to say about language linkage and linkage specifications, and it notes that a particular language linkage may be associated with a particular calling convention. Everything else related to calling conventions is implementation specific. Implementation specific для calling conventions, где бы найти |
|||
|
||||
| azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
не только в приведенном фрагменте. Этот фрагмент касается non-type template-parameter-ов. т.е. это то что в стандарте сказано про передачу шаблонному классу/функции нетипового параметра. Добавлено через 1 минуту и 53 секунды
смотря для кого? если для студии - в MSDN, если для MinGW - то у них на сайте предполагаю что будет. Добавлено через 4 минуты и 43 секунды http://www.hackcraft.net/cpp/MSCallingConventions/ Это сообщение отредактировал(а) azesmcar - 27.5.2009, 21:41 |
||||
|
|||||
| vaddsm |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 30.6.2007 Репутация: нет Всего: нет |
Тот факт, что стандарт языка не регламентировал «Implementation specific of calling conventions» меня весьма удручает, ну что ж, все же это ответ на вопрос “Почему?”, хоть и отрицательный.
На последок хочется взять и кинуть огромным булыжником в огород Borland. Апеллируя к вашим словам “при добавлении новых фич производители компиляторов должы добавить их так - чтобы они соответствовали общей структуре и логике ЯП”, с которыми я чертовски согласен, замечу: Что, разработчики компилятора Borland либо с нами не согласны либо сильно накасячили, заставив пользователей писать:
вместо волне логичного:
|
||||
|
|||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
vaddsm
надеетесь стать чемпионом по метанию камней в огород борланда? что я говорю...я же в разделе Borland C++ Builder но он в самом деле весьма сомнительно поддерживает стандарт, хотя получше чем Visual Studio 6. Но не будем забывать сколько лет дедушке. |
|||
|
||||
| vaddsm |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 30.6.2007 Репутация: нет Всего: нет |
Heeelp me!!! ) |
|||
|
||||
| vaddsm |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 30.6.2007 Репутация: нет Всего: нет |
boost::enable_if так же не работает на 6.0. Вероятно по причине того что принцип substitution-failure-is-not-an-error в компиляторе не реализован (. Придется мне видимо отказаться от некоторых замечательных вещей ради совместимости. Но если вдруг у кого-то будет идея как заставить последний ряд шаблонов работать на этом компиляторе.... Буду ОЧЕНЬ рад.
|
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |