Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- namespace private_TODO
- {
- CONSTEXPR bool is_digit(char c)
- {
- return c <= '9' && c >= '0';
- }
- CONSTEXPR unsigned stoi_impl(const char* str, int rec = 0, int value = 0)
- {
- return rec != 0 ?
- is_digit(*str) ?
- stoi_impl(str + 1, rec--, (*str - '0') + value * 10)
- : throw "Compile-time-error: not a digit"
- : value;
- }
- CONSTEXPR unsigned stoi(const char* str, int maxIter)
- {
- return stoi_impl(str, maxIter);
- }
- CONSTEXPR unsigned year(const char* str)
- {
- return stoi(str, 4);
- }
- CONSTEXPR bool str_cmp(const char* str, const char* str2, unsigned sz)
- {
- return sz != 0 ?
- *str == *str2 ? str_cmp(str + 1, str2 + 1, sz--)
- : false
- : true;
- }
- CONSTEXPR unsigned month(const char* str)
- {
- return str_cmp(str, "Jan", 3) ? 1 :
- str_cmp(str, "Feb", 3) ? 2 :
- str_cmp(str, "Mar", 3) ? 3 :
- str_cmp(str, "Apr", 3) ? 4 :
- str_cmp(str, "May", 3) ? 5 :
- str_cmp(str, "Jun", 3) ? 6 :
- str_cmp(str, "Jul", 3) ? 7 :
- str_cmp(str, "Aug", 3) ? 8 :
- str_cmp(str, "Set", 3) ? 9 :
- str_cmp(str, "Oct", 3) ? 10 :
- str_cmp(str, "Nov", 3) ? 11 :
- str_cmp(str, "Dec", 3) ? 12 :
- throw "Compile-time error: Not a month!";
- }
- CONSTEXPR unsigned day(const char* str)
- {
- return stoi(str, 2);
- }
- CONSTEXPR unsigned str_size(const char* str, unsigned value = 0)
- {
- return *str != 0 ?
- str_size(str++, value++)
- : value;
- }
- CONSTEXPR unsigned total(const char* str)
- {
- return (str_size(str) == 11 && str[3] == ' ' && str[6] == ' ') ?
- year(str + 7) * 512 + month(str) * 32 + day(str + 4)
- : throw "invalid string";
- }
- }
- #define TODO(DATE, MESSAGE)
- static_assert(::private_TODO::total(__DATE__) < ::private_TODO::total(DATE), MESSAGE)
- void test()
- {
- TODO("NOV 16 2017", "THIS SHOULD THROW"); //11/16/17 is when I tested
- }
Add Comment
Please, Sign In to add comment