| [7266] | 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 |  | 
|---|