From d13e0c9840204cf0182efb6563cbcf5e67bcbebc Mon Sep 17 00:00:00 2001 From: Kp Date: Sat, 9 Aug 2014 04:14:59 +0000 Subject: [PATCH] Add compile time check to partial_range --- common/include/partial_range.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/common/include/partial_range.h b/common/include/partial_range.h index a66bd15ae..b97f0d0f1 100644 --- a/common/include/partial_range.h +++ b/common/include/partial_range.h @@ -78,8 +78,15 @@ static inline typename tt::enable_if::value, partial_range_t< using std::distance; auto range_begin = begin(t); auto range_end = range_begin; +#ifdef DXX_HAVE_BUILTIN_CONSTANT_P +#define PARTIAL_RANGE_COMPILE_CHECK_BOUND(EXPR,S) \ + (__builtin_constant_p(EXPR) && __builtin_constant_p(d) && (DXX_ALWAYS_ERROR_FUNCTION(partial_range_will_always_throw, S " will always throw"), 0)) +#else +#define PARTIAL_RANGE_COMPILE_CHECK_BOUND(EXPR,S) 0 +#endif #define PARTIAL_RANGE_CHECK_BOUND(EXPR,S) \ if (EXPR > d) \ + ((void)(PARTIAL_RANGE_COMPILE_CHECK_BOUND(EXPR,S))), \ partial_range_error_t::report(file, line, estr, S, EXPR, t, d) size_t d = distance(range_begin, end(t)); PARTIAL_RANGE_CHECK_BOUND(o, "begin");