【发布时间】:2021-11-18 13:02:55
【问题描述】:
考虑以下有效的 C++20 代码:
#include <utility>
namespace foo
{
template<typename... Args>
struct tuple : Args... { };
template<std::size_t N, typename... Args>
auto get(tuple<Args...>) { return 0; }
}
namespace bar
{
template<typename... Args>
struct tuple : Args... { };
template<std::size_t N, typename... Args>
auto get(tuple<Args...>) { return 0; }
}
template<class Tuple, std::size_t... N>
auto for_each(Tuple& args, std::index_sequence<N...>) {
(get<N>(args), ...);
}
int main()
{
struct test { };
foo::tuple<test> t;
for_each(t, std::make_index_sequence<1>());
}
这里,get<N> 能够通过 ADL 解析,这要归功于 C++20 添加 (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0846r0.html)
我的问题是,在 C++20 之前有哪些解决方法,不需要方法 for_each 来了解 foo 和 bar 命名空间?
我对从 GCC 8 开始的任何东西都很满意。
【问题讨论】:
标签: c++ c++20 argument-dependent-lookup