检查类型是否可以与元素类型一起复制构造

问题描述 投票:0回答:1
template <typename T>
constexpr bool isVoidOrCopyConstructible = std::is_void_v<T> || std::is_copy_constructible_v<T>;

这对于

std::vector<std::unique_ptr<int>>
返回 true。

我将支票更改为:

template <typename T>
concept VoidOrEffectivelyCopyConstructible =
    std::is_void_v<T> || 
    std::is_copy_constructible_v<T> ||
    (requires { typename T::value_type; } && std::is_copy_constructible_v<typename T::value_type>);

它仍然返回 true

std::vector<std::unique_ptr<int>>

c++ templates
1个回答
0
投票

您需要检查非容器类型或包含类型的

std::is_copy_constructible_v
,而不是无条件检查
std::is_copy_constructible_v

template <typename T>
concept VoidOrEffectivelyCopyConstructible =
    std::is_void_v<T> ||
    (std::is_copy_constructible_v<T> && !requires { typename T::value_type; }) ||
    std::is_copy_constructible_v<typename T::value_type>;

见神箭

© www.soinside.com 2019 - 2024. All rights reserved.