我正在尝试编写一个模板函数,该函数使用解析get
为获取结构/范围(tuple
-esque)的成员的 ADL。
#include <iostream>
#include <utility>
#include <tuple>
int main() {
auto tup = std::make_tuple(1, 2);
std::cout << get<0>(tup) << std::endl;
}
我这样做是因为结构化绑定提案(http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4659.pdf §11.5.3)说明了如何get
使用从结构中获取元素。它说非成员get
用于从结构中获取元素。
我假设上面的代码会编译,因为 ADL 会导致get
在命名空间中查找函数std
(因为它的参数类型是std::tuple<int, int>
,它是 in std
),在那里可以找到它。但是,我得到一个错误。有人可以在这里解释正确的方法以及为什么上面的代码不起作用吗?在这种情况下如何强制 ADL 发生?