Where to add an overloaded operator for the tr1::array?
Posted
by phlipsy
on Stack Overflow
See other posts from Stack Overflow
or by phlipsy
Published on 2010-05-10T07:50:33Z
Indexed on
2010/05/10
7:54 UTC
Read the original article
Hit count: 201
Since I need to add an operator&
for the std::tr1::array<bool, N>
I wrote the following lines
template<std::size_t N>
std::tr1::array<bool, N>
operator& (const std::tr1::array<bool, N>& a,
const std::tr1::array<bool, N>& b)
{
std::tr1::array<bool, N> result;
std::transform(a.begin(), a.end(), b.begin(), result.begin(),
std::logical_and<bool>());
return result;
}
Now I don't know in which namespace I've to put this function. I considered the std
namespace as a restricted area. Only total specialization and overloaded function templates are allowed to be added by the user. Putting it into the global namespace isn't "allowed" either in order to prevent pollution of the global namespace and clashes with other declarations. And finally putting this function into the namespace of the project doesn't work since the compiler won't find it there.
What had I best do? I don't want to write a new array class putted into the project namespace. Because in this case the compiler would find the right namespace via argument dependent name lookup. Or is this the only possible way because writing a new operator for existing classes means extending their interfaces and this isn't allowed either for standard classes?
© Stack Overflow or respective owner