【发布时间】:2017-07-03 21:12:43
【问题描述】:
我正在尝试制作一个静态断言来检查是否可以将类型 A 添加到类型 B。有没有办法在编译时检查模板类型 A 是否可添加到模板类型 B? A 和 B 可以是任何东西。
【问题讨论】:
-
这取决于你所说的 addable 到底是什么意思。
标签: c++ templates compile-time static-assert
我正在尝试制作一个静态断言来检查是否可以将类型 A 添加到类型 B。有没有办法在编译时检查模板类型 A 是否可添加到模板类型 B? A 和 B 可以是任何东西。
【问题讨论】:
标签: c++ templates compile-time static-assert
使用is_detected,您可以执行以下操作:
template <typename LHS, typename RHS>
using sum_t = decltype(std::declval<LHS>() + std::declval<RHS>());
template <typename LHS, typename RHS>
using has_sum = is_detected<sum_t, LHS, RHS>;
【讨论】:
is_detected_v 。尽管如此,还是可以做到 template <typename LHS, typename RHS> constexpr auto has_sum_v = std::experimental::is_detected<sum_t, LHS, RHS>::value; 。 . . static_assert(has_sum_v<int,float>);