I am trying to code a template function that uses an ADL resolved get
to fetch members of a struct/range (tuple
-esque).
#include <iostream>
#include <utility>
#include <tuple>
int main() {
auto tup = std::make_tuple(1, 2);
std::cout << get<0>(tup) << std::endl;
}
I am doing this because of what the structured bindings proposal (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4659.pdf §11.5.3) says about how get
is used to fetch elements from the struct. It says that a non member get
is used to fetch elements from within the struct.
I assumed that the code above would compile, because ADL would cause the get
function to be looked for in the std
namespace (because it's argument is of type std::tuple<int, int>
, which is in std
), where it would be found. But, I get an error. Can someone explain the right approach here and also why the code above does not work? How can one force ADL to happen in this case?