The global namespace is not special in this regard, it works just like any other namespace and is thus perfectly fine for your use case.
Live example 1 of global namespace working.
Live example 2 of ADL actually being the reason #1 works1.
Here's the text of the live example:
#include <iostream>
struct X {};
template <class T>
void bar(T t)
{
foo(t);
}
void foo(X x)
{
std::cout << "Foo\n";
}
int main()
{
X x;
bar(x);
}
1 This fails, because ADL cannot find the function, while normal lookup would. So it proves that #1 really works thanks to ADL.