crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> boost::function, template и MS compiler 8.0, внимание: проблема компилятора!
Iron Bug
  опции профиля:
сообщение 26.2.2009, 9:49
Сообщение #1


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


Напоролась на багу с boost::function + MS compiler 8.0

Проявляется при применении template'ов функций и работе с boost::function при компиляции в MSVS 2005 SP1.

Рассмотрим вот такой маленький пример:

#include <boost/function.hpp>

template <class TResult>
TResult foo_template(TResult bar)
{
    return bar;
}

int main(void)
{
    boost::function<bool(bool)> boost_func = foo_template<bool>;

    bool (*simple_func)(bool);
    simple_func = &foo_template<bool>;

    boost_func(true);        // ooops!!! throws an exception here: the func is empty!
    (*simple_func)(false); // this works fine

    return 0;
}


В общем, казалось бы, ну куда проще... Задаём темплейт для функции, присваиваем указателю параметризованную функцию...
В примере реализованы два указателя - один через boost::function, второй - классический, определённый как обычный указатель на функцию.

Это прекрасно компилится, без единого ворнинга, НО! Сгенерированный компилятором MS 8.0 код даёт ран-тайм ошибку - нулевая функция в boost_func! А вот если закомментировать вызов boost_func - то всё нормально, "классический" указатель работает.

Все остальные протестированные мной компиляторы дают нормальный код, который правильно выполняется. А вот мелкософтовский даёт такой потайной баг.

Я также пробовала использовать "portable" синтакс библиотеки boost::function - то есть через boost::function1<bool,bool> - совершенно та же ситуация.

Может, у кого есть 2008 MS студия - надо бы под ней проверить, как эта конструкция работает. Я её ставить не хочу пока, в ней много рюшек и никаких плюсов для C++, судя по описаниям релиза. Но если там поправлена эта бага - то, видать, придётся обновить компилер.

Если и под ней не компилится - буду писать в boost. Пока вроде я не нашла упоминания такой баги у них в листах.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Iron Bug
  опции профиля:
сообщение 26.2.2009, 12:46
Сообщение #2


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


Цитата(Andrew Selivanov @ 26.2.2009, 14:29) *
в основном связкой Mingw 3.4.5 + Eclipse пользуюсь. Хотя Mingw тоже уже начинает доставать, взять хотя бы отсутствие нормальных локалей...

дык, у меня типа везде unicode. а в MinGW всё прекрасно, но у них своё понимание реализации стандартов ISO для unicode. что-то совпадает с остальными компилерами, что-то - нет. а украшать свой код кучей #ifdef'ов как-то не особо хочется.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.4.2024, 9:53