fix 857415: Calling convention issue with MSVC

git-svn-id: svn://svn.code.sf.net/p/loki-lib/code/trunk@133 7ec92016-0320-0410-acc4-a06ded1c099a
This commit is contained in:
rani_sharoni 2003-12-11 16:48:26 +00:00
parent 118c72dad1
commit de3e4bf67c
4 changed files with 34 additions and 18 deletions

View file

@ -27,7 +27,7 @@ unsigned int Loki::Private::elements = 0;
// Ensures proper destruction of objects with longevity
////////////////////////////////////////////////////////////////////////////////
void Loki::Private::AtExitFn()
void C_CALLING_CONVENTION_QUALIFIER Loki::Private::AtExitFn()
{
assert(elements > 0 && pTrackerArray != 0);
// Pick the element at the top of the stack

View file

@ -25,8 +25,16 @@
#include <cstdlib>
#include <new>
#ifdef _MSC_VER
#define C_CALLING_CONVENTION_QUALIFIER __cdecl
#else
#define C_CALLING_CONVENTION_QUALIFIER
#endif
namespace Loki
{
typedef void (C_CALLING_CONVENTION_QUALIFIER *atexit_pfn_t)();
namespace Private
{
////////////////////////////////////////////////////////////////////////////////
@ -87,7 +95,7 @@ namespace Loki
Destroyer destroyer_;
};
void AtExitFn(); // declaration needed below
void C_CALLING_CONVENTION_QUALIFIER AtExitFn(); // declaration needed below
} // namespace Private
@ -223,7 +231,7 @@ namespace Loki
template <class T>
struct DefaultLifetime
{
static void ScheduleDestruction(T*, void (*pFun)())
static void ScheduleDestruction(T*, atexit_pfn_t pFun)
{ std::atexit(pFun); }
static void OnDeadReference()
@ -241,7 +249,7 @@ namespace Loki
class PhoenixSingleton
{
public:
static void ScheduleDestruction(T*, void (*pFun)())
static void ScheduleDestruction(T*, atexit_pfn_t pFun)
{
#ifndef ATEXIT_FIXED
if (!destroyedOnce_)
@ -277,7 +285,7 @@ namespace Loki
struct Adapter
{
void operator()(T*) { return pFun_(); }
void (*pFun_)();
atexit_pfn_t pFun_;
};
}
@ -293,7 +301,7 @@ namespace Loki
class SingletonWithLongevity
{
public:
static void ScheduleDestruction(T* pObj, void (*pFun)())
static void ScheduleDestruction(T* pObj, atexit_pfn_t pFun)
{
Private::Adapter<T> adapter = { pFun };
SetLongevity(pObj, GetLongevity(pObj), adapter);
@ -312,7 +320,7 @@ namespace Loki
template <class T>
struct NoDestroy
{
static void ScheduleDestruction(T*, void (*)())
static void ScheduleDestruction(T*, atexit_pfn_t)
{}
static void OnDeadReference()
@ -399,7 +407,7 @@ namespace Loki
}
}
static void DestroySingleton()
static void C_CALLING_CONVENTION_QUALIFIER DestroySingleton()
{
assert(!destroyed_());
CreationPolicy<T>::Destroy(pInstance_());