Olhando a documentação , não entendo por que std::make_format_args()
pega uma referência e não uma referência const?
Meu objetivo é implementar algo como:
#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)...));
}
E poder passar const std::string&
como entrada args
, mas parece que std::make_format_args()
espera uma referência não const.
Eu recebo um erro:
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)'
ATUALIZAR
Posso reproduzir o erro aqui: https://godbolt.org/z/nj763o48r (localmente recebo exatamente o mesmo erro acima)
Devido à má experiência do usuário e aos problemas de segurança detalhados no Relatório de defeitos P2905R2 . O problema (resumos retirados da parte inferior da página de documentação ) era que "make_format_args aceitava argumentos de rvalue encaminhando referências", e a resolução era que make_format_args "aceita apenas referências de lvalue".