Почему std::make_format_args ожидает неконстантную ссылку

Глядя на документацию , я не понимаю, почему 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++ широко используется в разработке операционных систем и системного программирования.


1
50
1

Ответ:

Решено

Из-за плохого пользовательского опыта и проблем безопасности, подробно описанных в отчете о дефектах P2905R2 . Проблема (сводка взята из нижней части страницы документации) заключалась в том, что «make_format_args принимала аргументы rvalue путем пересылки ссылок», и решение заключалось в том, что make_format_args «принимает только ссылки lvalue».