Program Listing for File common.hpp
↰ Return to documentation for file (rcppsw/common/common.hpp
)
#pragma once
/*******************************************************************************
* Includes
******************************************************************************/
#include <string>
#include <cxxabi.h>
#include "rcsw/common/common.h"
#include "rcppsw/common/macros.hpp"
#include "rcppsw/mpl/mpl.hpp"
/*******************************************************************************
* Namespaces/Decls
******************************************************************************/
namespace rcppsw {
/*******************************************************************************
* String Conversion Templates
******************************************************************************/
namespace detail {
template <class T>
using to_str_type = decltype(std::declval<T>().to_str());
} /* namespace detail */
template <typename T,
RCPPSW_SFINAE_DECLDEF(!mpl::is_detected<detail::to_str_type, T>::value)>
std::string to_string(const T& obj) {
return std::to_string(obj);
}
template <class T,
RCPPSW_SFINAE_DECLDEF(mpl::is_detected<detail::to_str_type, T>::value)>
std::string to_string(const T& obj) {
return obj.to_str();
}
/*******************************************************************************
* Misc. Templates
******************************************************************************/
template <typename TEnum>
constexpr typename std::underlying_type<TEnum>::type
as_underlying(const TEnum& e) noexcept {
return static_cast<typename std::underlying_type<TEnum>::type>(e);
}
} /* namespace rcppsw */