add static_asserts to alert_cast (#881)

This commit is contained in:
Arvid Norberg 2016-07-03 15:07:20 -04:00 committed by GitHub
parent 75dca7116f
commit 34a2a7f7d4
1 changed files with 6 additions and 10 deletions

View File

@ -37,16 +37,7 @@ POSSIBILITY OF SUCH DAMAGE.
#include <deque>
#include <string>
#include <vector>
#include "libtorrent/aux_/disable_warnings_push.hpp"
#include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
#include <boost/preprocessor/repetition/enum.hpp>
#include <boost/preprocessor/repetition/enum_params.hpp>
#include <boost/preprocessor/repetition/enum_shifted_params.hpp>
#include <boost/preprocessor/repetition/enum_shifted_binary_params.hpp>
#include "libtorrent/aux_/disable_warnings_pop.hpp"
#include <type_traits>
// OVERVIEW
//
@ -295,12 +286,17 @@ namespace libtorrent {
// ``alert_cast<>`` can only cast to an exact alert type, not a base class
template <class T> T* alert_cast(alert* a)
{
static_assert(std::is_base_of<alert, T>::value
, "alert_cast<> can only be used with alert types (deriving from libtorrent::alert)");
if (a == nullptr) return nullptr;
if (a->type() == T::alert_type) return static_cast<T*>(a);
return nullptr;
}
template <class T> T const* alert_cast(alert const* a)
{
static_assert(std::is_base_of<alert, T>::value
, "alert_cast<> can only be used with alert types (deriving from libtorrent::alert)");
if (a == nullptr) return nullptr;
if (a->type() == T::alert_type) return static_cast<T const*>(a);
return nullptr;