Пара вопросов по 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);
}
}
- Почему
boost::swap
объявлен какtemplate <typename T1, typename T2>
, когда в остальной части кода все работает с одним и тем же типом? - Если я определяю свою собственную глобальную функцию
void swap(T&, T&)
, я вижу, что глобальная функция вызывается изswap_impl(T& left, T& right)
. Разве это не конфликт и, следовательно, условие ошибки, так какswap_impl
также используетnamespace std
, который имеет swap?