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 | |
---|