]> git.ipfire.org Git - thirdparty/vectorscan.git/commitdiff
verify_types: add type static assertions
authorJustin Viiret <justin.viiret@intel.com>
Mon, 1 May 2017 04:21:51 +0000 (14:21 +1000)
committerMatthew Barr <matthew.barr@intel.com>
Tue, 30 May 2017 03:59:00 +0000 (13:59 +1000)
src/util/verify_types.h

index 148b437716b18bc54fb27432089495d59ff4aabf..5833d5ec62f48a77a778996d7d9c46ebf709320a 100644 (file)
 #include "util/compile_error.h"
 
 #include <cassert>
+#include <type_traits>
 
 namespace ue2 {
 
 template<typename To_T, typename From_T>
 To_T verify_cast(From_T val) {
+    static_assert(std::is_integral<To_T>::value,
+                  "Output type must be integral.");
+    static_assert(std::is_integral<From_T>::value ||
+                      std::is_enum<From_T>::value ||
+                      std::is_convertible<From_T, To_T>::value,
+                  "Must be integral or enum type, or convertible to output.");
+
     To_T conv_val = static_cast<To_T>(val);
     if (static_cast<From_T>(conv_val) != val) {
         assert(0);
         throw ResourceLimitError();
     }
+
     return conv_val;
 }