首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这是ConvertsWithoutNarrowing的正确实现吗?

这是ConvertsWithoutNarrowing的正确实现吗?
EN

Stack Overflow用户
提问于 2022-05-21 18:50:18
回答 1查看 71关注 0票数 1

我目前正在学习C++20中的概念,并遇到了以下示例:

代码语言:javascript
复制
template <typename From, typename To>
concept is_convertible_without_narrowing = requires (From&& from) {
  { std::type_identity_t<To[]>{std::forward<From>(from)}} -> std::same_as<To[1]>;
};

我感到好奇的是,以下几点是否可以被认为是实现上述目标的正确选择:

代码语言:javascript
复制
template <typename From, typename To>
concept is_convertible_without_narrowing = requires (From&& from) {
  { To{std::forward<From>(from)} } -> std::same_as<To>;
}

或者,甚至更简单:

代码语言:javascript
复制
template <typename From, typename To>
concept is_convertible_without_narrowing = requires (From&& from, To&& to) {
  to = {from};
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-21 19:13:25

我很好奇,是否可以认为以下是上述实现的一个正确的替代实现:

答案很简单:不。

在第二个版本中,To{std::forward<From>(from)}可以看作是通过initializer_list构建To,因此is_convertible_without_narrowing<int, std::vector<int>>就是true

同样,第三个版本可以被认为是用initializer_list分配initializer_list,因此is_convertible_without_narrowing<int, std::vector<int>&>也将是true

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72332387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档