【发布时间】:2021-05-25 18:42:11
【问题描述】:
您可能知道std::max 和std::min “受苦”,因为它们有 1 个模板参数,所以即使简单的 max(container.size(), 47) 也不起作用,因为 .size() 返回 size_t 而 47 是 int .
我知道过去有 proposal 向 C++ 添加适当的重载,但它被拒绝了。
但据我所知,这主要是因为纸张太复杂而没有足够的收益,所以我想知道是否有人会使用 std::common_range_t 作为返回值(发明的类型特征,让你的 int/float 大到足以容纳 min/max混合参数,否则硬错误)会很好......
所以最后要回答我的问题: 如果我们希望 min/max 扩展以采用上述 2 个模板参数,是否存在任何向后兼容性或任何其他阻止这种情况的问题?
注意:
- 这主要是技术上可能的问题,我不对 WG21 计划做任何事情来标准化这个问题感兴趣,主要是对潜在的技术限制感到好奇。
- C++17 version of this question(由于某种原因严重否决????),但更笼统地说,还涉及一些其他限制。
【问题讨论】:
-
你不是在问“C++ 概念”是否会让
common_range_t更容易实现吗?你认为min/max与common_range_t的任何其他潜在用户有什么不同吗?如果有,请说明它们有何特别之处。 -
我不知道你在问什么。标题是在谈论概念,内容是在谈论该论文的向后兼容性。另外,我不确定您为什么认为您的
std::common_range_t与论文中的内容不同(请注意,一些复杂性来自早于std::common_type的论文)? -
@Barry 是的,我脑子里很清楚......我的意思是 common_range_t 要求类型“足够接近”,也许如果我在标题中使用约束会更清晰?
-
@BenVoigt 我只是好奇是否存在一些向后可比性问题,如果我有 my_lib::max 我可以做我想做的事,因为我控制了所有用户
标签: c++ c++20 c++-concepts