Я хотел создать псевдоним _t
для std::is_base_of
, аналогично тому, как std::enable_if_t
является псевдонимом для std::enable_if
. Поэтому я добавил следующее к моему стандартному заголовку:Написание пользовательских псевдонимов типа C++ 14 типа
namespace std {
template<typename T, typename U>
using is_base_of_t = typename is_base_of<T,U>::type;
}
Я использую этот новый псевдоним в следующем контексте:
template <typename SpaceT,
typename TagT,
typename = std::enable_if_t<std::is_base_of_t<Space,SpaceT>>>
class SpatialTree : public SpaceT {
};
И я получаю следующее сообщение об ошибке: Gcc
SpatialTree.h:48:101: error: type/value mismatch at argument 1 in template parameter list for ‘template<bool _Cond, class _Tp> using enable_if_t = typename std::enable_if::type’
template <typename SpaceT, typename TagT, typename = std::enable_if_t<std::is_base_of_t<Space,SpaceT>>>
Что я делаю неправильно?
вы должны поставить это в другом пространстве имен, например, 'xstd' и перейти на' std', когда это станет стандартизированным – TemplateRex