static_assert用于任何类型的unique_ptr

das*_*esy 5 c++ static-assert

我怎样才能静态断言表达式是一个std::unique_ptrstd::unique_ptr<T>任何T.

static_assert (std::is_pointer<decltype(exp)>()), "not a smart pointer")
Run Code Online (Sandbox Code Playgroud)

以上不起作用.如果没有直接的话,我只对bool()定义了类型的运算符感兴趣.

Rei*_*ica 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
{};
Run Code Online (Sandbox Code Playgroud)


Jar*_*d42 5

您可以为此创建一个特征:

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));
Run Code Online (Sandbox Code Playgroud)