diff --git a/libraries/eosiolib/core/eosio/print.hpp b/libraries/eosiolib/core/eosio/print.hpp index c2ee216fdc..73f08ff5a0 100644 --- a/libraries/eosiolib/core/eosio/print.hpp +++ b/libraries/eosiolib/core/eosio/print.hpp @@ -5,8 +5,8 @@ #pragma once #include #include - - +#include +#include namespace eosio { namespace internal_use_do_not_use { @@ -44,6 +44,7 @@ namespace eosio { __attribute__((eosio_wasm_import)) void printhex(const void*, uint32_t); } + }; /** @@ -86,7 +87,7 @@ namespace eosio { * @param len - number of chars to print */ inline void printl( const char* ptr, size_t len ) { - internal_use_do_not_use::prints_l(ptr, len); + internal_use_do_not_use::prints_l(ptr, len); } /** @@ -96,7 +97,27 @@ namespace eosio { * @param ptr - a null terminated string */ inline void print( const char* ptr ) { - internal_use_do_not_use::prints(ptr); + internal_use_do_not_use::prints(ptr); + } + + /** + * Prints string + * + * @ingroup console + * @param str - an std::string + */ + inline void print( const std::string& str ) { + internal_use_do_not_use::prints_l(str.c_str(), str.size()); + } + + /** + * Prints string + * + * @ingroup console + * @param str - an std::string_view + */ + inline void print( std::string_view str ) { + internal_use_do_not_use::prints_l(str.data(), str.size()); } /** @@ -160,16 +181,12 @@ namespace eosio { * * @ingroup console * @param t to be printed - * @pre T must implements print() function + * @pre T must implement print() function */ - template>::value, int> = 0> - inline void print( T&& t ) { - if constexpr (std::is_same, std::string>::value) - internal_use_do_not_use::prints_l( t.c_str(), t.size() ); - else if constexpr (std::is_same, char*>::value) - internal_use_do_not_use::prints(t); - else - t.print(); + template + inline auto print(T&& t) -> std::void_t + { + std::forward(t).print(); } /** @@ -179,7 +196,7 @@ namespace eosio { * @param s null terminated string to be printed */ inline void print_f( const char* s ) { - internal_use_do_not_use::prints(s); + internal_use_do_not_use::prints(s); } /** @@ -229,7 +246,8 @@ namespace eosio { * @endcode */ template - void print( Arg&& a, Args&&... args ) { + auto print( Arg&& a, Args&&... args ) -> std::enable_if_t + { print(std::forward(a)); print(std::forward(args)...); }