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