Changeset 30240 in vbox for trunk/include
- Timestamp:
- Jun 16, 2010 12:33:33 PM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 62735
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/iprt/assert.h
r28800 r30240 273 273 #endif 274 274 275 /** @def RTASSERT_HAVE_STATIC_ASSERT 276 * Indicates that the compiler implements static_assert(expr, msg). 277 * @todo Does any GCC version support static_assert? 278 */ 279 #ifdef _MSC_VER 280 # if _MSC_VER >= 1600 && defined(__cplusplus) 281 # define RTASSERT_HAVE_STATIC_ASSERT 282 # endif 283 #endif 284 #ifdef DOXYGEN_RUNNING 285 # define RTASSERT_HAVE_STATIC_ASSERT 286 #endif 287 275 288 /** @def AssertCompile 276 289 * Asserts that a compile-time expression is true. If it's not break the build. 277 290 * @param expr Expression which should be true. 278 291 */ 279 #ifdef __GNUC__ 292 #ifdef RTASSERT_HAVE_STATIC_ASSERT 293 # define AssertCompile(expr) static_assert(!!(expr), #expr) 294 #elif defined(__GNUC__) 280 295 # define AssertCompile(expr) extern int RTASSERTVAR[1] __attribute__((unused)), RTASSERTVAR[(expr) ? 1 : 0] __attribute__((unused)) 281 296 #else … … 393 408 #endif 394 409 410 /** @def AssertCompileMembersAtSameOffset 411 * Asserts that members of two different structures are at the same offset. 412 * @param type1 The first type. 413 * @param member1 The first member. 414 * @param type2 The second type. 415 * @param member2 The second member. 416 */ 417 #if defined(__GNUC__) 418 # if __GNUC__ >= 4 419 # define AssertCompileMembersAtSameOffset(type1, member1, type2, member2) \ 420 AssertCompile(__builtin_offsetof(type1, member1) == __builtin_offsetof(type2, member2)) 421 # else 422 # define AssertCompileMembersAtSameOffset(type1, member1, type2, member2) \ 423 AssertCompile(RT_OFFSETOF(type1, member1) == RT_OFFSETOF(type2, member2)) 424 # endif 425 #else 426 # define AssertCompileMembersAtSameOffset(type, member1, member2) \ 427 AssertCompile(RT_OFFSETOF(type1, member1) == RT_OFFSETOF(type2, member2)) 428 #endif 429 430 /** @def AssertCompileMembersSameSize 431 * Asserts that members of two different structures have the same size. 432 * @param type1 The first type. 433 * @param member1 The first member. 434 * @param type2 The second type. 435 * @param member2 The second member. 436 */ 437 #define AssertCompileMembersSameSize(type1, member1, type2, member2) \ 438 AssertCompile(RT_SIZEOFMEMB(type1, member1) == RT_SIZEOFMEMB(type2, member2)) 439 440 /** @def AssertCompileMembersSameSizeAndOffset 441 * Asserts that members of two different structures have the same size and are 442 * at the same offset. 443 * @param type1 The first type. 444 * @param member1 The first member. 445 * @param type2 The second type. 446 * @param member2 The second member. 447 */ 448 #if defined(__GNUC__) 449 # if __GNUC__ >= 4 450 # define AssertCompileMembersSameSizeAndOffset(type1, member1, type2, member2) \ 451 AssertCompile(__builtin_offsetof(type1, member1) == __builtin_offsetof(type2, member2) && RT_SIZEOFMEMB(type1, member1) == RT_SIZEOFMEMB(type2, member2)) 452 # else 453 # define AssertCompileMembersSameSizeAndOffset(type1, member1, type2, member2) \ 454 AssertCompile(RT_OFFSETOF(type1, member1) == RT_OFFSETOF(type2, member2) && RT_SIZEOFMEMB(type1, member1) == RT_SIZEOFMEMB(type2, member2)) 455 # endif 456 #else 457 # define AssertCompileMembersSameSizeAndOffset(type, member1, member2) \ 458 AssertCompile(RT_OFFSETOF(type1, member1) == RT_OFFSETOF(type2, member2) && RT_SIZEOFMEMB(type1, member1) == RT_SIZEOFMEMB(type2, member2)) 459 #endif 460 395 461 /** @} */ 396 462
Note:
See TracChangeset
for help on using the changeset viewer.