C++20 std::source_location 在自由函数和模板函数之间产生不同的列号
C++20 std::source_location yield different column numbers between free function and template functions
考虑模板函数g()
和自由函数f()
:
#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()
会产生不同的结果?我希望结果是一样的。为什么模板实例化的时候一个单位偏移量消失了?
我向 GCC Bugzilla 提交了一份 PR 99672。 Jakub Jelinek(GCC 贡献者之一)回复我:
I think the standard doesn't specify anything about what exactly the
column should be, so using different columns isn't standard violation.
但他还是做了一个补丁来修复它。
考虑模板函数g()
和自由函数f()
:
#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()
会产生不同的结果?我希望结果是一样的。为什么模板实例化的时候一个单位偏移量消失了?
我向 GCC Bugzilla 提交了一份 PR 99672。 Jakub Jelinek(GCC 贡献者之一)回复我:
I think the standard doesn't specify anything about what exactly the column should be, so using different columns isn't standard violation.
但他还是做了一个补丁来修复它。