C++20 std::source_location дает разные номера столбцов между бесплатными функциями и функциями шаблона

Рассмотрим функцию шаблона и бесплатную функцию:

      #include <iostream>
#include <source_location>

auto g(auto...) {
std::cout << std::source_location::current().column() << "\n";
}

auto f() {
std::cout << std::source_location::current().column() << "\n";
}

int main() {
g();
f();
}

При компиляции с помощью GCC-trunk получается следующий вывод:

      43
44

Почему g() и f()дают разные результаты? Я ожидаю, что результаты будут такими же. Почему единичное смещение исчезло во время создания шаблона?

1 ответ

Я подаю PR 99672 в GCC Bugzilla. Якуб Елинек (один из участников GCC) ответил мне:

Я думаю, что в стандарте ничего не говорится о том, каким именно должен быть столбец, поэтому использование разных столбцов не является стандартным нарушением.

но он все равно сделал патч, чтобы исправить это.

Другие вопросы по тегам