mysql-audit/include/static_assert.h

44 lines
1.5 KiB
C

/*
* compile_assert.h
*
* Created on: Mar 6, 2011
* Author: Guyl
*/
#ifndef COMPILE_STATIC_ASSERT_H_
#define COMPILE_STATIC_ASSERT_H_
/**
* Taken from: http://stackoverflow.com/questions/807244/c-compiler-asserts-how-to-implement
* A compile time assertion check.
*
* Validate at compile time that the predicate is true without
* generating code. This can be used at any point in a source file
* where typedef is legal.
*
* On success, compilation proceeds normally.
*
* On failure, attempts to typedef an array type of negative size. The
* offending line will look like
* typedef assertion_failed_file_h_42[-1]
* where file is the content of the second parameter which should
* typically be related in some obvious way to the containing file
* name, 42 is the line number in the file on which the assertion
* appears, and -1 is the result of a calculation based on the
* predicate failing.
*
* \param predicate The predicate to test. It must evaluate to
* something that can be coerced to a normal C boolean.
*
* \param file A sequence of legal identifier characters that should
* uniquely identify the source file in which this condition appears.
*/
#define CASSERT(predicate, file) _impl_CASSERT_LINE(predicate,__LINE__,file)
#define _impl_PASTE(a,b) a##b
#define _impl_CASSERT_LINE(predicate, line, file) \
typedef char _impl_PASTE(assertion_failed_##file##_,line)[2*!!(predicate)-1];
#endif /* COMPILE_STATIC_ASSERT_H_ */