Должен ли я использовать throw () при реализации безбрасывающего свопа?

Должен ли я использовать throw () ?

namespace A
{
   struct B
   {
     void swap( B& other ) throw()
     { /* fancy stuff that doesn't throw */ }
   };

   void swap( B& lhs, B& rhs ) throw()
   { lhs.swap(rhs); }
}

namespace std
{
   template<>
   void swap( A::B& lhs, A::B& rhs ) throw()
   { lhs.swap(rhs); }
}

При реализации идиомы без метания свопа?

namespace A
{
   struct B
   {
     void swap( B& other ) throw()
     { /* fancy stuff that doesn't throw */ }
   };

   void swap( B& lhs, B& rhs ) throw()
   { lhs.swap(rhs); }
}

namespace std
{
   template<>
   void swap( A::B& lhs, A::B& rhs ) throw()
   { lhs.swap(rhs); }
}

В частности, меня беспокоит включение спецификации throw () в специализация std :: swap .

Бонусный вопрос:
Отличается ли ответ при использовании ключевого слова noexcept в C ++ 0x?

6
задан deft_code 13 November 2010 в 00:12
поделиться