Files
pcas/src/libCom/misc/compilerDependencies.h
Andrew Johnson 2fb7df8548 libCom: __attribute__((deprecated)) not in gcc 2.x
Only apply this attribute for gcc 3 and later.
2011-06-20 13:52:32 -05:00

105 lines
2.8 KiB
C++

/*************************************************************************\
* Copyright (c) 2008 UChicago Argonne LLC, as Operator of Argonne
* National Laboratory.
* Copyright (c) 2002 The Regents of the University of California, as
* Operator of Los Alamos National Laboratory.
* EPICS BASE is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
\*************************************************************************/
/*
* Author:
* Jeffrey O. Hill
* johill@lanl.gov
*/
#ifndef compilerDependencies_h
#define compilerDependencies_h
/*
* This is an attempt to move all tests identifying what features a
* compiler supports into one file.
*
* Since this is a compiler, and not os dependent, issue then ifdefs
* are used. The ifdefs allow us to make the default assumption that
* standards incompliance issues will be fixed by future compiler
* releases.
*/
#ifdef __cplusplus
/*
* CXX_PLACEMENT_DELETE - defined if compiler supports placement delete
* CXX_THROW_SPECIFICATION - defined if compiler supports throw specification
*/
#if defined ( _MSC_VER )
# if _MSC_VER >= 1200 /* visual studio 6.0 or later */
# define CXX_PLACEMENT_DELETE
# endif
# if _MSC_VER > 1300 /* some release after visual studio 7 we hope */
# define CXX_THROW_SPECIFICATION
# endif
#elif defined ( __HP_aCC )
# if _HP_aCC > 33300
# define CXX_PLACEMENT_DELETE
# endif
# define CXX_THROW_SPECIFICATION
#elif defined ( __BORLANDC__ )
# if __BORLANDC__ >= 0x600
# define CXX_PLACEMENT_DELETE
# endif
# define CXX_THROW_SPECIFICATION
#elif defined ( __GNUC__ )
# if __GNUC__ > 2 || ( __GNUC__ == 2 && __GNUC_MINOR__ >= 95 )
# define CXX_THROW_SPECIFICATION
# endif
# if __GNUC__ > 2 || ( __GNUC__ == 2 && __GNUC_MINOR__ >= 96 )
# define CXX_PLACEMENT_DELETE
# endif
#else
# define CXX_PLACEMENT_DELETE
# define CXX_THROW_SPECIFICATION
#endif
/*
* usage: void func () epicsThrows (( std::bad_alloc, std::logic_error ))
*/
#if defined ( CXX_THROW_SPECIFICATION )
# define epicsThrows(X) throw X
#else
# define epicsThrows(X)
#endif
/*
* usage: epicsPlacementDeleteOperator (( void *, myMemoryManager & ))
*/
#if defined ( CXX_PLACEMENT_DELETE )
# define epicsPlacementDeleteOperator(X) void operator delete X;
#else
# define epicsPlacementDeleteOperator(X)
#endif
#endif /* __cplusplus */
/*
* Enable format-string checking if possible
*/
#ifdef __GNUC__
# define EPICS_PRINTF_STYLE(f,a) __attribute__((format(__printf__,f,a)))
#else
# define EPICS_PRINTF_STYLE(f,a)
#endif
/*
* Deprecation marker
*/
#if defined( __GNUC__ ) && (__GNUC__ > 2)
# define EPICS_DEPRECATED __attribute__((deprecated))
#else
# define EPICS_DEPRECATED
#endif
#endif /* ifndef compilerDependencies_h */