Add simgear::noexceptSwap() to simgear/sg_inlines.h

This is a function template that is guaranteed to be 'noexcept' as long
as compilation succeeds. Idea and implementation from
<https://akrzemi1.wordpress.com/2011/06/10/using-noexcept/>.
This commit is contained in:
Florent Rougon
2017-11-13 11:59:11 +01:00
parent 6283a515b9
commit abaaee1af2

View File

@@ -23,6 +23,7 @@
//
// $Id$
#include <utility>
#ifndef _SG_INLINES_H
#define _SG_INLINES_H
@@ -108,5 +109,20 @@ inline void SG_NORMALIZE_RANGE( T &val, const T min, const T max ) {
#define SG_DISABLE_COPY(Class) \
Class(const Class &); \
Class &operator=(const Class &);
namespace simgear {
// A swap() that is guaranteed to be 'noexcept' as long as compilation
// succeeds. Idea and implementation from
// <https://akrzemi1.wordpress.com/2011/06/10/using-noexcept/>.
template<typename T>
void noexceptSwap(T& a, T& b) noexcept
{
using std::swap;
static_assert(noexcept(swap(a, b)), "this swap() is not 'noexcept'" );
swap(a, b);
}
} // of namespace simgear
#endif // _SG_INLINES_H