before fmtlib v9, fmtlib provides: template<typename S, typename ...Args, typename Char = enable_if_t<detail::is_string<S>::value, char_t<S>>> void fmt::print(std::basic_ostream<Char> &os, const S &format_str, Args&&... args) but in fmtlib v9 and up, it provides: template<typename ...T> void fmt::print(std::ostream &os, format_string<T...> fmt, T&&... args) so we need to use different function signatures for talking to different fmtlib versions. please see https://fmt.dev/8.1.0/api.html#_CPPv4I0Dp0EN3fmt5printEvRNSt13basic_ostreamI4CharEERK1SDpRR4Args, and https://fmt.dev/9.0.0/api#_CPPv4IDpEN3fmt5printEvRNSt7ostreamE13format_stringIDp1TEDpRR1T fore more details. Signed-off-by: Kefu Chai <tchaikov@gmail.com>
Sage Weil <sage@newdream.net> Ceph - scalable distributed storage system