我如何静态断言表达式为std::unique_ptr
,即std::unique_ptr<T>
T
。
static_assert (std::is_pointer<decltype(exp)>()), "not a smart pointer")
以上不起作用。如果没有直截了当,我只对定义类型的bool()
运算符感兴趣。
答案 0 :(得分:6)
创建自己的特征,并使用适当的部分特化:
template <class T>
struct is_unique_ptr : std::false_type
{};
template <class T, class D>
struct is_unique_ptr<std::unique_ptr<T, D>> : std::true_type
{};
答案 1 :(得分:3)
您可以为此创建特征:
template <typename T, typename D>
std::true_type is_unique_ptr_impl(const std::unique_ptr<T, D>&, int);
template <typename T>
std::false_type is_unique_ptr_impl(const T&, ...);
template <typename T>
using is_unique_ptr = decltype(is_unique_ptr_impl(std::declval<T>(), 0));
答案 2 :(得分:1)
您可以使用:
static_assert(std::is_same<decltype(expr),
std::unique_ptr<std::remove_pointer<decltype(expr.get())>::type>>::value, "");
基本上,它的作用是从std::unique_ptr::get()
创建一个std::unique_ptr
类型,并将其与expr
进行比较。只有当expr
为std::unique_ptr
时,才会出现这种情况。