Глядя на документацию , я не понимаю, почему std::make_format_args()
принимает ссылку, а не константную ссылку?
Моя цель - реализовать что-то вроде:
#include <format>
template <class... Args>
inline static std::string format(const std::string_view field, Args&&... args)
{
return std::vformat(field, std::make_format_args(std::forward<Args>(args)...));
}
И возможность передать const std::string&
в качестве входных данных в args
, но похоже, что std::make_format_args()
ожидает неконстантную ссылку.
Я получаю сообщение об ошибке:
A non-const reference may only be bound to an lvalue C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.40.33807\include\format(3713): note: see declaration of 'std::make_format_args'
note: while trying to match the argument list '(_Ty, const std::string, _Ty, _Ty)'
ОБНОВЛЯТЬ
Я могу воспроизвести ошибку здесь: https://godbolt.org/z/nj763o48r (локально я получаю ту же ошибку, что и выше)
🤔 А знаете ли вы, что...
Язык C++ широко используется в разработке операционных систем и системного программирования.
Из-за плохого пользовательского опыта и проблем безопасности, подробно описанных в отчете о дефектах P2905R2 . Проблема (сводка взята из нижней части страницы документации) заключалась в том, что «make_format_args принимала аргументы rvalue путем пересылки ссылок», и решение заключалось в том, что make_format_args «принимает только ссылки lvalue».