| Make make_arg work with libfmt 10.1+ |
| |
| This ensures that compiler can find the correct template to use |
| Fixes |
| |
| mariadb-10.11.5/sql/item_strfunc.cc:1429:22: error: no matching functi |
| on for call to 'make_arg' |
| | 1429 | vargs[carg-1]= fmt::detail::make_arg<ctx>(args[carg]->val_int()); |
| | | ^~~~~~~~~~~~~~~~~~~~~~~~~~ |
| | /mnt/b/yoe/master/build/tmp/work/cortexa72-cortexa53-crypto-yoe-linux/mariadb/10.11.5/recipe-sysroot/usr/include/fmt/core.h:1588:20: note: candidate functio |
| n [with Context = fmt::basic_format_context<fmt::appender, char>, T = long long] not viable: expects an lvalue for 1st argument |
| | 1588 | FMT_CONSTEXPR auto make_arg(T& val) -> basic_format_arg<Context> { |
| | | ^ ~~~~~~ |
| | /mnt/b/yoe/master/build/tmp/work/cortexa72-cortexa53-crypto-yoe-linux/mariadb/10.11.5/recipe-sysroot/usr/include/fmt/core.h:1559:31: note: candidate templat |
| e ignored: invalid explicitly-specified argument for template parameter 'PACKED' |
| | 1559 | FMT_CONSTEXPR FMT_INLINE auto make_arg(T& [ 46%] Building C object mysys/CMakeFiles/mysys.dir/my_likely.c.o |
| | val) -> value<Context> { |
| | | ^ |
| | /mnt/b/yoe/master/build/tmp/work/cortexa72-cortexa53-crypto-yoe-linux/mariadb/10.11.5/recipe-sysroot/usr/include/fmt/core.h:1596:27: note: candidate templat |
| e ignored: invalid explicitly-specified argument for template parameter 'PACKED' |
| | 1596 | FMT_CONSTEXPR inline auto make_arg(T& val) -> basic_format_arg<Context> { |
| | | ^ |
| |
| Upstream-Status: Pending |
| Signed-off-by: Khem Raj <raj.khem@gmail.com> |
| |
| --- a/cmake/libfmt.cmake |
| +++ b/cmake/libfmt.cmake |
| @@ -33,8 +33,9 @@ MACRO (CHECK_LIBFMT) |
| #include <fmt/format-inl.h> |
| #include <iostream> |
| int main() { |
| + int val = 42; |
| fmt::format_args::format_arg arg= |
| - fmt::detail::make_arg<fmt::format_context>(42); |
| + fmt::detail::make_arg<fmt::format_context>(val); |
| std::cout << fmt::vformat(\"The answer is {}.\", |
| fmt::format_args(&arg, 1)); |
| }" HAVE_SYSTEM_LIBFMT) |
| --- a/sql/item_strfunc.cc |
| +++ b/sql/item_strfunc.cc |
| @@ -1426,14 +1426,22 @@ String *Item_func_sformat::val_str(Strin |
| switch (args[carg]->result_type()) |
| { |
| case INT_RESULT: |
| - vargs[carg-1]= fmt::detail::make_arg<ctx>(args[carg]->val_int()); |
| + int intval; |
| + intval = args[carg]->val_int(); |
| + vargs[carg-1]= fmt::detail::make_arg<ctx>(intval); |
| break; |
| case DECIMAL_RESULT: // TODO |
| case REAL_RESULT: |
| + float fval; |
| + int val; |
| if (args[carg]->field_type() == MYSQL_TYPE_FLOAT) |
| - vargs[carg-1]= fmt::detail::make_arg<ctx>((float)args[carg]->val_real()); |
| - else |
| - vargs[carg-1]= fmt::detail::make_arg<ctx>(args[carg]->val_real()); |
| + { |
| + fval = (float)args[carg]->val_real(); |
| + vargs[carg-1]= fmt::detail::make_arg<ctx>(fval); |
| + } else { |
| + val = args[carg]->val_real(); |
| + vargs[carg-1]= fmt::detail::make_arg<ctx>(val); |
| + } |
| break; |
| case STRING_RESULT: |
| if (!(parg= args[carg]->val_str(&val_arg[carg-1]))) |