@@ -197,7 +197,8 @@ constexpr void check_format(std::string_view fmt, int fmt_start, FoundFormatSpec
197
197
*specs = found;
198
198
break ;
199
199
case ConversionSpecifier::CHAR_PTR:
200
- if constexpr (!std::is_convertible_v<Arg, const char *>) {
200
+ if constexpr (!std::is_convertible_v<Arg, const char *> &&
201
+ !std::is_convertible_v<Arg, const std::string &>) {
201
202
YOSYS_ABORT (" Expected type convertible to char *" );
202
203
}
203
204
*specs = found;
@@ -259,8 +260,17 @@ inline void format_emit_one(std::string &result, std::string_view fmt, const Fou
259
260
format_emit_type<Arg, double >(result, spec, dynamic_ints, num_dynamic_ints, arg);
260
261
return ;
261
262
case ConversionSpecifier::CHAR_PTR:
262
- format_emit_type<Arg, const char *>(result, spec, dynamic_ints, num_dynamic_ints, arg);
263
- return ;
263
+ if constexpr (std::is_convertible_v<Arg, const char *>) {
264
+ format_emit_type<Arg, const char *>(result, spec, dynamic_ints, num_dynamic_ints, arg);
265
+ return ;
266
+ }
267
+ if constexpr (std::is_convertible_v<Arg, const std::string &>) {
268
+ const std::string &s = arg;
269
+ format_emit_type<const char *, const char *>(result, spec, dynamic_ints, num_dynamic_ints,
270
+ s.c_str ());
271
+ return ;
272
+ }
273
+ break ;
264
274
case ConversionSpecifier::VOID_PTR:
265
275
format_emit_type<Arg, void *>(result, spec, dynamic_ints, num_dynamic_ints, arg);
266
276
return ;
0 commit comments