Skip to content

Instantly share code, notes, and snippets.

@Raclamusi
Last active December 30, 2022 09:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Raclamusi/b365019f7605192162d5e35ffaed0a54 to your computer and use it in GitHub Desktop.
Save Raclamusi/b365019f7605192162d5e35ffaed0a54 to your computer and use it in GitHub Desktop.
#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);
}
#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
$ 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