12 namespace internal_use_do_not_use {
15 void prints(
const char*);
27 void printi128(const int128_t*);
30 void printui128(const uint128_t*);
39 void printqf(const
long double*);
89 internal_use_do_not_use::prints_l(ptr,
len);
98 inline void print(
const char* ptr ) {
99 internal_use_do_not_use::prints(ptr);
107 template <
typename T, std::enable_if_t<std::is_
integral<std::decay_t<T>>::value &&
108 std::is_
signed<std::decay_t<T>>::value,
int> = 0>
110 if constexpr(std::is_same<T, int128_t>::value)
111 internal_use_do_not_use::printi128(&num);
112 else if constexpr(std::is_same<T, char>::value)
113 internal_use_do_not_use::prints_l( &num, 1 );
115 internal_use_do_not_use::printi(num);
123 template <
typename T, std::enable_if_t<std::is_
integral<std::decay_t<T>>::value &&
124 !std::is_
signed<std::decay_t<T>>::value,
int> = 0>
125 inline void print( T num ) {
126 if constexpr(std::is_same<T, uint128_t>::value)
127 internal_use_do_not_use::printui128(&num);
128 else if constexpr(std::is_same<T, bool>::value)
129 internal_use_do_not_use::prints(num?
"true":
"false");
131 internal_use_do_not_use::printui(num);
140 inline void print(
float num ) { internal_use_do_not_use::printsf( num ); }
148 inline void print(
double num ) { internal_use_do_not_use::printdf( num ); }
156 inline void print(
long double num ) { internal_use_do_not_use::printqf( &num ); }
165 template<
typename T, std::enable_if_t<!std::is_
integral<std::decay_t<T>>::value,
int> = 0>
167 if constexpr (std::is_same<std::decay_t<T>, std::string>::value)
168 internal_use_do_not_use::prints_l( t.c_str(), t.size() );
169 else if constexpr (std::is_same<std::decay_t<T>,
char*>::value)
170 internal_use_do_not_use::prints(t);
182 internal_use_do_not_use::prints(s);
199 template <
typename Arg,
typename... Args>
200 inline void print_f(
const char* s, Arg val, Args... rest ) {
201 while ( *s !=
'\0' ) {
207 internal_use_do_not_use::prints_l( s, 1 );
231 template<
typename Arg,
typename... Args>
232 void print( Arg&& a, Args&&... args ) {
233 print(std::forward<Arg>(a));
234 print(std::forward<Args>(args)...);
273 static iostream cout;