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: 177

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

Related posts about c++

Related posts about operator-overloading