![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| GoldFinch |
|
||||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
этот код работает. а если раскомментировать 22ю строчку, то он будет работать в MSVC, а g++ выдаст ошибку
link1, link2 при этом на самом деле причина ошибки в том, что g++ считает method_to_fn перегруженной функцией, и по этому нужен static_cast чтобы выбрать "перегрузку". почему так? |
||||
|
|||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Красотища...
Чистой воды UB. Это сообщение отредактировал(а) Леопольд - 27.11.2010, 15:38 -------------------- вопросов больше чем ответов |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
boostcoder, какая там версия гцц?
|
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
GoldFinch, пока ещё не смог понять из кода, что именно надо...
-------------------- вопросов больше чем ответов |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
Леопольд, не страшно
boostcoder, похоже действительно в 4.5 это починили, это какая-то особенность С++0х |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Может это?
Это сообщение отредактировал(а) Леопольд - 27.11.2010, 15:47 -------------------- вопросов больше чем ответов |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
Леопольд, не угадали.
|
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Тогда, может объясните по человечески? Потому что, если избавиться от UB, получается именно это...
-------------------- вопросов больше чем ответов |
|||
|
||||
| GoldFinch |
|
||||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
эээ нееет) это чит потому что когда там обе строчки, версия со статик-кастом позволяет работать версии без статик-каста
http://liveworkspace.org/code/9b7c03115be3...2fc50ee142cd60e Добавлено через 2 минуты и 8 секунд Леопольд, this тут вообще ни при чем, а нулевой this - это вроде не UB. В любом случае, это к проблеме отношения не имеет, добавляйте туда объект если хотите. Добавлено через 4 минуты и 8 секунд btw, liveworkspace.org всем хорош, только там табуляция 3 символа =\ хотелось бы 4 %) |
||||
|
|||||
| Леопольд |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
UB приводить указатели на функцию, static_cast неспроста не даёт этого делать. Это UB в действии http://liveworkspace.org/code/9b7c03115be3...2fc50ee142cd60e Использовать С-ишное приведение в С++, зачем?
Наверное, это ближе всех: http://liveworkspace.org/code/c631f5ef9be4...477373840e60b9a static_cast из void * , тоже самое что и reinterpret_cast. Только выглядит безобиднее. На мой взгляд, не особо много смысла. Зачем это надо? Это сообщение отредактировал(а) Леопольд - 27.11.2010, 16:34 -------------------- вопросов больше чем ответов |
||||
|
|||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
Леопольд, С-style cast тоже ни при чем. Что вы, приведения типов функций никогда чтоле не видели %)
|
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
В С++ не видел. Про С не могу сказать, может там это легально.
Это сообщение отредактировал(а) Леопольд - 27.11.2010, 16:24 -------------------- вопросов больше чем ответов |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
Леопольд, впрочем, спасибо за подсказку
убрал из сигнатуры method_to_fn шаблонный тип, "перегрузки" исчезли, и всё заработало
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |