Функция С++ 20 std::source_location
используется для сбора информации о контексте, в котором вызывается функция.
Когда я пытался использовать его с функцией шаблона переменной, я столкнулся с проблемой: я не вижу места для размещения параметра source_location
.
Следующее не работает, потому что переменные параметры должны быть в конце:
// does not work
template <typename... Args>
void debug(Args&&... args,
const std::source_location& loc = std::source_location::current());
Следующее также не работает, потому что вызывающий будет облажен параметром, вставленным между ними:
// does not work either, because ...
template <typename... Args>
void debug(const std::source_location& loc = std::source_location::current(),
Args&&... args);
// the caller will get confused
debug(42); // error: cannot convert 42 to std::source_location
Мне сообщили в комментарии, что std::source_location
без проблем работает с вариационными шаблонами, но я изо всех сил пытаюсь выяснить, как это сделать. Как я могу использовать std::source_location
с функциями шаблона Variadic?