blob: 28eb5164e7cddc4fbcbe4b0efd1f4e9b91c5b33b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011 - 2013 ACIN, fortiss GmbH
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alois Zoitl
* - initial API and implementation and/or initial documentation
*******************************************************************************/
#ifndef _STATICASSERT_H_
#define _STATICASSERT_H_
#ifdef __GNUC__
//The latest GCC is rather picky about unused typedefs. We need this for our static assert and its ok there that it is unused there.
# define FORTE_ATTRIBUTE_UNUSED __attribute__((unused))
#else //__GNUC__
# define FORTE_ATTRIBUTE_UNUSED
#endif //__GNUC__
/*! A simple compile time assert which is based on the books:
* - Modern C++ Design, Andrei Alexandrescu
* - Imperfect C++, Matthew Wilson
* It tries to combine the simplicity of Wilson's solution with the
* better compiler message generation of Alexandrescu's solution.
*/
#define FORTE_STATIC_ASSERT(paExpr, paMsg) \
{ typedef int ERROR_##paMsg[(paExpr) ? 1 : -1] FORTE_ATTRIBUTE_UNUSED; }
//(void)sizeof(ERROR_##paMsg);}
#endif