| 1 | //////////////////////////////////////////////////////////////////////////////// | 
|---|
| 2 | // The Loki Library | 
|---|
| 3 | // Copyright (c) 2001 by Andrei Alexandrescu | 
|---|
| 4 | // This code accompanies the book: | 
|---|
| 5 | // Alexandrescu, Andrei. "Modern C++ Design: Generic Programming and Design | 
|---|
| 6 | //     Patterns Applied". Copyright (c) 2001. Addison-Wesley. | 
|---|
| 7 | // Permission to use, copy, modify, distribute and sell this software for any | 
|---|
| 8 | //     purpose is hereby granted without fee, provided that the above copyright | 
|---|
| 9 | //     notice appear in all copies and that both that copyright notice and this | 
|---|
| 10 | //     permission notice appear in supporting documentation. | 
|---|
| 11 | // The author or Addison-Wesley Longman make no representations about the | 
|---|
| 12 | //     suitability of this software for any purpose. It is provided "as is" | 
|---|
| 13 | //     without express or implied warranty. | 
|---|
| 14 | //////////////////////////////////////////////////////////////////////////////// | 
|---|
| 15 | #ifndef LOKI_STATIC_CHECK_INC_ | 
|---|
| 16 | #define LOKI_STATIC_CHECK_INC_ | 
|---|
| 17 |  | 
|---|
| 18 | // $Id: static_check.h 982 2009-01-31 07:51:27Z rich_sposato $ | 
|---|
| 19 |  | 
|---|
| 20 |  | 
|---|
| 21 | namespace Loki | 
|---|
| 22 | { | 
|---|
| 23 | //////////////////////////////////////////////////////////////////////////////// | 
|---|
| 24 | // Helper structure for the STATIC_CHECK macro | 
|---|
| 25 | //////////////////////////////////////////////////////////////////////////////// | 
|---|
| 26 |  | 
|---|
| 27 | template<int> struct CompileTimeError; | 
|---|
| 28 | template<> struct CompileTimeError<true> {}; | 
|---|
| 29 | } | 
|---|
| 30 |  | 
|---|
| 31 | //////////////////////////////////////////////////////////////////////////////// | 
|---|
| 32 | // macro LOKI_STATIC_CHECK | 
|---|
| 33 | // Invocation: LOKI_STATIC_CHECK(expr, id) | 
|---|
| 34 | // where: | 
|---|
| 35 | // expr is a compile-time integral or pointer expression | 
|---|
| 36 | // id is a C++ identifier that does not need to be defined | 
|---|
| 37 | // If expr is zero, id will appear in a compile-time error message. | 
|---|
| 38 | //////////////////////////////////////////////////////////////////////////////// | 
|---|
| 39 |  | 
|---|
| 40 | #define LOKI_STATIC_CHECK(expr, msg) \ | 
|---|
| 41 | { Loki::CompileTimeError<((expr) != 0)> ERROR_##msg; (void)ERROR_##msg; } | 
|---|
| 42 |  | 
|---|
| 43 |  | 
|---|
| 44 | #endif // end file guardian | 
|---|
| 45 |  | 
|---|