Вопрос по boost :: swap

Пара вопросов по boost :: swap . Пожалуйста, обратитесь к приведенному ниже коду, который в основном представляет собой вырезанную пасту из boost / swap.hpp . Я имею в виду версию библиотеки 1.43.0.

namespace boost_swap_impl
    {
      template<class T>
      void swap_impl(T& left, T& right)
      {
        using namespace std;//use std::swap if argument dependent lookup fails
        swap(left,right);
      }

  template<class T, std::size_t N>
  void swap_impl(T (& left)[N], T (& right)[N])
  {
    for (std::size_t i = 0; i < N; ++i)
    {
      ::boost_swap_impl::swap_impl(left[i], right[i]);
    }
  }
}

namespace boost
{
  template<class T1, class T2>
  void swap(T1& left, T2& right)
  {
    ::boost_swap_impl::swap_impl(left, right);
  }
}
  1. Почему boost :: swap объявлен как template когда в остальной части кода все работает с одним и тем же типом?
  2. Если я определяю свою собственную глобальную функцию void swap (T &, T &) , я вижу, что это глобальная функция, которая вызывается из swap_impl (T & left, T & right) . Разве это не конфликт и, следовательно, состояние ошибки, поскольку swap_impl также использует пространство имен std , для которого задан swap?
14
задан Lightness Races with Monica 24 May 2011 в 18:47
поделиться