Last active
December 30, 2022 09:13
-
-
Save Raclamusi/b365019f7605192162d5e35ffaed0a54 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "constexpr_print.hpp" | |
#include <array> | |
#include <string_view> | |
#include <algorithm> | |
#include <concepts> | |
template <std::unsigned_integral T> | |
constexpr std::size_t digits(T x) { | |
std::size_t d = 1; | |
while (x /= 10) ++d; | |
return d; | |
} | |
template <std::size_t N> | |
struct fizzbuzz { | |
static constexpr std::size_t size = | |
fizzbuzz<N - 1>::size + ( | |
N % 15 == 0 ? 9 : | |
N % 3 == 0 || N % 5 == 0 ? 5 : | |
digits(N) + 1 | |
); | |
static constexpr std::array<char, size> data = [] { | |
using namespace std::literals::string_view_literals; | |
std::array<char, size> data; | |
auto it = std::ranges::copy(fizzbuzz<N - 1>::data, data.begin()).out; | |
if (N % 15 == 0) std::ranges::copy("FizzBuzz\n"sv, it); | |
else if (N % 3 == 0) std::ranges::copy("Fizz\n"sv, it); | |
else if (N % 5 == 0) std::ranges::copy("Buzz\n"sv, it); | |
else { | |
auto it = data.rbegin(); | |
*it++ = '\n'; | |
auto n = N; | |
do *it++ = '0' + n % 10; | |
while (n /= 10); | |
} | |
return data; | |
}(); | |
static constexpr std::string_view value{ data.data(), size }; | |
}; | |
template <> | |
struct fizzbuzz<0> { | |
static constexpr std::size_t size = 0; | |
static constexpr std::array<char, size> data {}; | |
static constexpr std::string_view value{ data.data(), size }; | |
}; | |
int main() { | |
constexpr_print(fizzbuzz<30>::value); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#ifndef INCLUDED_CONSTEXPR_PRINT | |
#if __INCLUDE_LEVEL__ == 1 | |
# define STARTED_INCLUDING_CONSTEXPR_PRINT | |
#elif not defined(STARTED_INCLUDING_CONSTEXPR_PRINT) | |
# error this file must be included directly from the source file | |
#endif | |
#ifdef STARTED_INCLUDING_CONSTEXPR_PRINT | |
#if __INCLUDE_LEVEL__ == 128 | |
# define INCLUDED_CONSTEXPR_PRINT | |
#endif | |
#if __INCLUDE_LEVEL__ == 1 | |
#include <string_view> | |
#include <array> | |
#include <tuple> | |
#include <utility> | |
#include <cstddef> | |
#ifndef STR | |
# ifndef STR2 | |
# define STR2(...) #__VA_ARGS__ | |
# endif | |
# define STR(...) STR2(__VA_ARGS__) | |
#endif | |
#ifndef CONSTEXPR_PRINT_TAB_SIZE | |
# define CONSTEXPR_PRINT_TAB_SIZE 4 | |
#endif | |
#ifndef CONSTEXPR_PRINT_MOVE_UP | |
# define CONSTEXPR_PRINT_MOVE_UP 15 | |
#endif | |
#ifndef CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT | |
# define CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT 1 | |
#endif | |
template <class S_GETTER> | |
constexpr void constexpr_print_impl(S_GETTER s_getter) { | |
constexpr std::string_view s = s_getter(); | |
constexpr std::size_t n = s.size(); | |
constexpr auto xs = [=] { | |
constexpr std::size_t tab_size = (CONSTEXPR_PRINT_TAB_SIZE); | |
std::array<std::size_t, n> xs; | |
std::size_t x = 0; | |
for (std::size_t i = 0; i < xs.size(); ++i) { | |
xs[i] = x; | |
if (s[i] == '\b') { | |
if (x > 0) --x; | |
} | |
else if (s[i] == '\t') x = (x + tab_size) / tab_size * tab_size; | |
else if (s[i] == '\n') x = 0; | |
else if (s[i] == '\r') x = 0; | |
else if (s[i] >= ' ') ++x; | |
if (x >= 128) x = 0; | |
} | |
return xs; | |
}(); | |
constexpr std::tuple asserters{ | |
#endif // __INCLUDE_LEVEL__ == 1 | |
[] (auto c_getter) { | |
constexpr char c = c_getter(); | |
static_assert(c != '\x00', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x00\x1b[J"); | |
static_assert(c != '\x01', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x01\x1b[J"); | |
static_assert(c != '\x02', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x02\x1b[J"); | |
static_assert(c != '\x03', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x03\x1b[J"); | |
static_assert(c != '\x04', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x04\x1b[J"); | |
static_assert(c != '\x05', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x05\x1b[J"); | |
static_assert(c != '\x06', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x06\x1b[J"); | |
static_assert(c != '\x07', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x07\x1b[J"); | |
static_assert(c != '\x08', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x08\x1b[J"); | |
static_assert(c != '\x09', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x09\x1b[J"); | |
static_assert(c != '\x0a', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x0a\x1b[J"); | |
static_assert(c != '\x0b', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x0b\x1b[J"); | |
static_assert(c != '\x0c', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x0c\x1b[J"); | |
static_assert(c != '\x0d', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x0d\x1b[J"); | |
static_assert(c != '\x0e', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x0e\x1b[J"); | |
static_assert(c != '\x0f', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x0f\x1b[J"); | |
static_assert(c != '\x10', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x10\x1b[J"); | |
static_assert(c != '\x11', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x11\x1b[J"); | |
static_assert(c != '\x12', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x12\x1b[J"); | |
static_assert(c != '\x13', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x13\x1b[J"); | |
static_assert(c != '\x14', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x14\x1b[J"); | |
static_assert(c != '\x15', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x15\x1b[J"); | |
static_assert(c != '\x16', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x16\x1b[J"); | |
static_assert(c != '\x17', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x17\x1b[J"); | |
static_assert(c != '\x18', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x18\x1b[J"); | |
static_assert(c != '\x19', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x19\x1b[J"); | |
static_assert(c != '\x1a', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x1a\x1b[J"); | |
static_assert(c != '\x1b', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x1b\x1b[J"); | |
static_assert(c != '\x1c', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x1c\x1b[J"); | |
static_assert(c != '\x1d', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x1d\x1b[J"); | |
static_assert(c != '\x1e', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x1e\x1b[J"); | |
static_assert(c != '\x1f', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x1f\x1b[J"); | |
static_assert(c != '\x20', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x20\x1b[J"); | |
static_assert(c != '\x21', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x21\x1b[J"); | |
static_assert(c != '\x22', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x22\x1b[J"); | |
static_assert(c != '\x23', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x23\x1b[J"); | |
static_assert(c != '\x24', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x24\x1b[J"); | |
static_assert(c != '\x25', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x25\x1b[J"); | |
static_assert(c != '\x26', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x26\x1b[J"); | |
static_assert(c != '\x27', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x27\x1b[J"); | |
static_assert(c != '\x28', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x28\x1b[J"); | |
static_assert(c != '\x29', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x29\x1b[J"); | |
static_assert(c != '\x2a', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x2a\x1b[J"); | |
static_assert(c != '\x2b', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x2b\x1b[J"); | |
static_assert(c != '\x2c', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x2c\x1b[J"); | |
static_assert(c != '\x2d', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x2d\x1b[J"); | |
static_assert(c != '\x2e', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x2e\x1b[J"); | |
static_assert(c != '\x2f', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x2f\x1b[J"); | |
static_assert(c != '\x30', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x30\x1b[J"); | |
static_assert(c != '\x31', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x31\x1b[J"); | |
static_assert(c != '\x32', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x32\x1b[J"); | |
static_assert(c != '\x33', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x33\x1b[J"); | |
static_assert(c != '\x34', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x34\x1b[J"); | |
static_assert(c != '\x35', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x35\x1b[J"); | |
static_assert(c != '\x36', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x36\x1b[J"); | |
static_assert(c != '\x37', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x37\x1b[J"); | |
static_assert(c != '\x38', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x38\x1b[J"); | |
static_assert(c != '\x39', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x39\x1b[J"); | |
static_assert(c != '\x3a', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x3a\x1b[J"); | |
static_assert(c != '\x3b', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x3b\x1b[J"); | |
static_assert(c != '\x3c', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x3c\x1b[J"); | |
static_assert(c != '\x3d', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x3d\x1b[J"); | |
static_assert(c != '\x3e', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x3e\x1b[J"); | |
static_assert(c != '\x3f', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x3f\x1b[J"); | |
static_assert(c != '\x40', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x40\x1b[J"); | |
static_assert(c != '\x41', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x41\x1b[J"); | |
static_assert(c != '\x42', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x42\x1b[J"); | |
static_assert(c != '\x43', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x43\x1b[J"); | |
static_assert(c != '\x44', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x44\x1b[J"); | |
static_assert(c != '\x45', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x45\x1b[J"); | |
static_assert(c != '\x46', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x46\x1b[J"); | |
static_assert(c != '\x47', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x47\x1b[J"); | |
static_assert(c != '\x48', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x48\x1b[J"); | |
static_assert(c != '\x49', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x49\x1b[J"); | |
static_assert(c != '\x4a', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x4a\x1b[J"); | |
static_assert(c != '\x4b', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x4b\x1b[J"); | |
static_assert(c != '\x4c', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x4c\x1b[J"); | |
static_assert(c != '\x4d', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x4d\x1b[J"); | |
static_assert(c != '\x4e', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x4e\x1b[J"); | |
static_assert(c != '\x4f', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x4f\x1b[J"); | |
static_assert(c != '\x50', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x50\x1b[J"); | |
static_assert(c != '\x51', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x51\x1b[J"); | |
static_assert(c != '\x52', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x52\x1b[J"); | |
static_assert(c != '\x53', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x53\x1b[J"); | |
static_assert(c != '\x54', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x54\x1b[J"); | |
static_assert(c != '\x55', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x55\x1b[J"); | |
static_assert(c != '\x56', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x56\x1b[J"); | |
static_assert(c != '\x57', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x57\x1b[J"); | |
static_assert(c != '\x58', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x58\x1b[J"); | |
static_assert(c != '\x59', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x59\x1b[J"); | |
static_assert(c != '\x5a', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x5a\x1b[J"); | |
static_assert(c != '\x5b', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x5b\x1b[J"); | |
static_assert(c != '\x5c', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x5c\x1b[J"); | |
static_assert(c != '\x5d', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x5d\x1b[J"); | |
static_assert(c != '\x5e', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x5e\x1b[J"); | |
static_assert(c != '\x5f', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x5f\x1b[J"); | |
static_assert(c != '\x60', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x60\x1b[J"); | |
static_assert(c != '\x61', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x61\x1b[J"); | |
static_assert(c != '\x62', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x62\x1b[J"); | |
static_assert(c != '\x63', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x63\x1b[J"); | |
static_assert(c != '\x64', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x64\x1b[J"); | |
static_assert(c != '\x65', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x65\x1b[J"); | |
static_assert(c != '\x66', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x66\x1b[J"); | |
static_assert(c != '\x67', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x67\x1b[J"); | |
static_assert(c != '\x68', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x68\x1b[J"); | |
static_assert(c != '\x69', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x69\x1b[J"); | |
static_assert(c != '\x6a', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x6a\x1b[J"); | |
static_assert(c != '\x6b', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x6b\x1b[J"); | |
static_assert(c != '\x6c', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x6c\x1b[J"); | |
static_assert(c != '\x6d', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x6d\x1b[J"); | |
static_assert(c != '\x6e', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x6e\x1b[J"); | |
static_assert(c != '\x6f', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x6f\x1b[J"); | |
static_assert(c != '\x70', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x70\x1b[J"); | |
static_assert(c != '\x71', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x71\x1b[J"); | |
static_assert(c != '\x72', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x72\x1b[J"); | |
static_assert(c != '\x73', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x73\x1b[J"); | |
static_assert(c != '\x74', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x74\x1b[J"); | |
static_assert(c != '\x75', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x75\x1b[J"); | |
static_assert(c != '\x76', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x76\x1b[J"); | |
static_assert(c != '\x77', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x77\x1b[J"); | |
static_assert(c != '\x78', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x78\x1b[J"); | |
static_assert(c != '\x79', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x79\x1b[J"); | |
static_assert(c != '\x7a', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x7a\x1b[J"); | |
static_assert(c != '\x7b', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x7b\x1b[J"); | |
static_assert(c != '\x7c', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x7c\x1b[J"); | |
static_assert(c != '\x7d', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x7d\x1b[J"); | |
static_assert(c != '\x7e', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x7e\x1b[J"); | |
static_assert(c != '\x7f', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x7f\x1b[J"); | |
}, | |
#include __FILE__ | |
#if __INCLUDE_LEVEL__ == 1 | |
}; | |
[=]<std::size_t... I>(std::index_sequence<I...>) { | |
static_assert((void(I), ..., false)); | |
([=] { | |
constexpr char c = s[I]; | |
constexpr std::size_t x = xs[I]; | |
static_assert((void(I), false)); // 連続して同じ static_assert に引っかかるとエラーメッセージが省略されるので、ダミーを挟む | |
std::get<x>(asserters)([=] { return c; }); | |
}(), ...); | |
}(std::make_index_sequence<n>{}); | |
} | |
#define constexpr_print(s) constexpr_print_impl([=]() constexpr { return std::string_view{ (s) }; }) | |
#endif // __INCLUDE_LEVEL__ == 1 | |
#endif // STARTED_INCLUDING_CONSTEXPR_PRINT | |
#endif // INCLUDED_CONSTEXPR_PRINT |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$ g++ -std=c++20 constexpr_fizzbuzz.cpp -DCONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT=9 | |
In file included from constexpr_fizzbuzz.cpp:1: | |
constexpr_print.hpp: In instantiation of 'constexpr_print_impl<main()::<lambda()> >(main()::<lambda()>)::<lambda(std::index_sequence<I ...>)> [with long long unsigned int ...I = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120}; std::index_sequence<I ...> = std::integer_sequence<long long unsigned int, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, | |
1 | |
2 | |
Fizz | |
4 | |
Buzz | |
Fizz | |
7 | |
8 | |
Fizz | |
Buzz | |
11 | |
Fizz | |
13 | |
14 | |
FizzBuzz | |
16 | |
17 | |
Fizz | |
19 | |
Buzz | |
Fizz | |
22 | |
23 | |
Fizz | |
Buzz | |
26 | |
Fizz | |
28 | |
29 | |
FizzBuzz | |
79 | static_assert(c != '\x0a', "\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP) "F\x1b[" STR(CONSTEXPR_PRINT_MOVE_UP_ADJUSTMENT) "F\x1b[" STR(__INCLUDE_LEVEL__) "F\x1b[" STR(__INCLUDE_LEVEL__) "G\x0a\x1b[J"); | |
| ~~^~~~~~~~~ | |
constexpr_print.hpp:79:29: note: '(((int)c) != 10)' evaluates to false |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment