Opened 15 years ago
Last modified 9 years ago
#373 new enhancement
Compile time assertion
| Reported by: | Peter Kovacs | Owned by: | Alpar Juttner |
|---|---|---|---|
| Priority: | major | Milestone: | LEMON 1.5 release |
| Component: | core | Version: | hg main |
| Keywords: | Cc: | ||
| Revision id: |
Description
Compile time assertion would be useful in some cases (instead of LEMON_ASSERT).
A possible solution is the following:
template <bool> struct STATIC_ASSERT_FAILURE;
template <> struct STATIC_ASSERT_FAILURE<true> {};
template<int x> struct static_assert_test{};
#define LEMON_COMPILE_ASSERT(x) \
typedef static_assert_test<\
sizeof(STATIC_ASSERT_FAILURE< (bool)( x ) >)>\
_static_assert_typedef_
It could be used like that:
LEMON_COMPILE_ASSERT(numeric_limits<T>::is_integer);
Change History (5)
comment:1 Changed 15 years ago by
comment:2 Changed 15 years ago by
boost/static_assert.h in the Boost library implements a solution. Maybe we should check it.
comment:3 Changed 13 years ago by
| Milestone: | LEMON 1.3 release → LEMON 1.4 release |
|---|
comment:4 Changed 12 years ago by
C++11 has a keyword for this: http://en.cppreference.com/w/cpp/language/static_assert
The latest versions of GCC, Clang, ICC, MSVC all support it. But maybe an ifdef could hide it, if the compiler doesn't support it.
comment:5 Changed 9 years ago by
| Milestone: | LEMON 1.4 release → LEMON 1.5 release |
|---|
Note: See
TracTickets for help on using
tickets.


It would indeed be useful in some cases. How meaningful/understandable is the error message emitted by the compiler? For example how will it comment the line
?