Re: std::to_string
От: rg45 СССР  
Дата: 17.05.25 09:35
Оценка: +1
Здравствуйте, Marty, Вы писали:

M>Насколько легально перегружать to_string из NS std для своих типов?


Ну, to_string и раньше не была обозначена как "customization point". А в последних версиях я и вовсе не нахожу этого пункта. Выходит, нельзя. Подробнее можно почитать по ссылкам:

https://en.cppreference.com/w/cpp/language/extending_std
https://timsong-cpp.github.io/cppwp/constraints

M>ADL — не работает. Вернее, конечно же работает для моих типов, когда я пишу to_string(myTypeVal), но это вполне ожидаемо не работает для встроенных типов. Как быть?


Я бы сразу затачивал собственную программу на использование собственной версии ToString, через которую будут доступны все версии std::to_string и которую можно будет расширять и кастомайзить, как только душе угодно.

Эскизно (с концептами) так:

template <template T>
concept StdToStringCompatible = requires(T t) {{std::to_string(t)} -> std::convertible_to<std::string>;};

std::string ToString(StdToStringCompatible auto&& t) {return std::to_string(t);}

std::string ToString(const MyTypeVal& t) { return /* . . . */; }


Того же эффекта можно добиться и на SFINAE, просто вместо концептов будут классы метафункций.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 17.05.2025 9:51 rg45 . Предыдущая версия . Еще …
Отредактировано 17.05.2025 9:49 rg45 . Предыдущая версия .
Отредактировано 17.05.2025 9:47 rg45 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.