Помогите с подключением Boost.Test 1.40
От: Аноним  
Дата: 07.12.09 19:44
Оценка:
У меня компилятор "Microsoft Visual C++ 7.1"
Если я в опциях компилятора задаю ключ /Gr (соглашение о вызовах __fastcall ), то при выполнении примера из Boost.Test
выдается исключение уже на этапе иницализации в unit_test_main.
Если задаю компилятору соглашение о вызовах __cdecl то все нормально работает.
Что сделать чтобы Boost.Test заработал без ошибок?

Вот пример, создаем пустой проект в студии и вставляем туда этот код, функцию main конечно удаляем.

#define BOOST_TEST_MODULE MyTest
#include <boost/test/included/unit_test.hpp>
using namespace boost::unit_test;
int add( int i, int j ) { return i+j; }
BOOST_AUTO_TEST_CASE( my_test )
{
// seven ways to detect and report the same error:
BOOST_CHECK( add( 2,2 ) == 4 ); // #1 continues on error
BOOST_REQUIRE( add( 2,2 ) == 4 );// #2 throws on error
if( add( 2,2 ) != 4 )
BOOST_ERROR( "Ouch..." ); // #3 continues on error
if( add( 2,2 ) != 4 )
BOOST_FAIL( "Ouch..." ); // #4 throws on error
if( add( 2,2 ) != 4 ) throw "Ouch...";// #5 throws
// on error
BOOST_CHECK_MESSAGE( add( 2,2 ) == 4, // #6 continues
// on error
"add(..) result: " << add( 2,2 ) );
BOOST_CHECK_EQUAL( add( 2,2 ), 4 ); // #7 continues
// on error
}
Re: Помогите с подключением Boost.Test 1.40
От: Аноним  
Дата: 07.12.09 20:22
Оценка:
С версией Boost 1.34 пример работает

А с 1.40 уже при компиляции пишет
c:\Development\boost_1_40\boost\test\impl\execution_monitor.ipp(825): error C2664: '_set_se_translator' : cannot convert parameter 1 from 'void (__fastcall *)(unsigned int,_EXCEPTION_POINTERS *)' to '_se_translator_function'

Если руками явно поставить __cdecl для функции,
static void __cdecl seh_catch_preventer( unsigned int /* id */, _EXCEPTION_POINTERS* /* exps */ )
{
throw;
}

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