【问题标题】:Static assert whether or not add operation is available静态断言添加操作是否可用
【发布时间】:2017-07-03 21:12:43
【问题描述】:

我正在尝试制作一个静态断言来检查是否可以将类型 A 添加到类型 B。有没有办法在编译时检查模板类型 A 是否可添加到模板类型 B? A 和 B 可以是任何东西。

【问题讨论】:

  • 这取决于你所说的 addable 到底是什么意思。

标签: c++ templates compile-time static-assert


【解决方案1】:

使用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 &lt;typename LHS, typename RHS&gt; constexpr auto has_sum_v = std::experimental::is_detected&lt;sum_t, LHS, RHS&gt;::value; 。 . . static_assert(has_sum_v&lt;int,float&gt;);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-18
  • 2020-10-29
  • 1970-01-01
  • 1970-01-01
  • 2011-09-24
  • 1970-01-01
  • 2021-12-07
相关资源
最近更新 更多