Re: Compile time error testing
In article <1149463680.429963.146110@i39g2000cwa.googlegroups.com>,
<glaird@pacifier.com> wrote:
I seem to remember that some sort of C++ language compile time testing
facility exists--though I can't seem to find anything about it in the
C++ docs or my compiler docs (Borland C++ Builder).
Given the following;
struct ST{
char ch1[2];
char ch2[100];
int ii;
};
I seem to recall that one could somehow write something like:
if(sizeof(ST) != 106)error("Message");
and have the expression evaluated at compile time and flag an error if
needed.
Am I recalling something from another lifetime or maybe a future
lifetime--or does this exist now?
boost's mpl library has compile time asserts
#include <boost/mpl/assert.hpp>
struct ST { /* as above */};
BOOST_MPL_ASSERT_RELATION(sizeof(ST),==,106);
btw its false on my machine, [needs to pad between the ch2 and ii]
a simple approach is:
template <bool B> struct ST_size_error;
template <> struct ST_size_error<true> {typedef char type;};
ST_size_error<sizeof(ST)==106>::type error_check;
should produce a fairly readable error message if sizeof(ST) != 106.
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]