@@ -206,7 +206,8 @@ constexpr void check_format(std::string_view fmt, int fmt_start, FoundFormatSpec
206
206
*specs = found;
207
207
break ;
208
208
case CONVSPEC_CHAR_PTR:
209
- if constexpr (!std::is_convertible_v<Arg, const char *>) {
209
+ if constexpr (!std::is_convertible_v<Arg, const char *> &&
210
+ !std::is_convertible_v<Arg, const std::string &>) {
210
211
YOSYS_ABORT (" Expected type convertible to char *" );
211
212
}
212
213
*specs = found;
@@ -274,8 +275,17 @@ inline void format_emit_one(std::string &result, std::string_view fmt, const Fou
274
275
format_emit_type<Arg, double >(result, spec, dynamic_ints, num_dynamic_ints, arg);
275
276
return ;
276
277
case CONVSPEC_CHAR_PTR:
277
- format_emit_type<Arg, const char *>(result, spec, dynamic_ints, num_dynamic_ints, arg);
278
- return ;
278
+ if constexpr (std::is_convertible_v<Arg, const char *>) {
279
+ format_emit_type<Arg, const char *>(result, spec, dynamic_ints, num_dynamic_ints, arg);
280
+ return ;
281
+ }
282
+ if constexpr (std::is_convertible_v<Arg, const std::string &>) {
283
+ const std::string &s = arg;
284
+ format_emit_type<const char *, const char *>(result, spec, dynamic_ints, num_dynamic_ints,
285
+ s.c_str ());
286
+ return ;
287
+ }
288
+ break ;
279
289
case CONVSPEC_VOID_PTR:
280
290
format_emit_type<Arg, void *>(result, spec, dynamic_ints, num_dynamic_ints, arg);
281
291
return ;
0 commit comments