【发布时间】:2020-10-13 12:46:44
【问题描述】:
Cppreference 对std::optional 的混合(可选和一些其他非可选类型)比较运算符有以下描述:
将 opt 与一个值进行比较。值进行比较(使用 T) 的对应运算符仅当 opt 包含值时。否则, opt 被认为小于值。如果对应的两路 *opt 和 value 之间的比较表达式格式不正确,或者如果 其结果不可转换为 bool,行为未定义。
让我困惑的是:
-
这些不规范的比较有哪些例子?
-
为什么编译器/STL 不直接拒绝无效的比较而不是给我们 UB?
【问题讨论】:
-
只是猜测:
T有一个奇怪的T::operator== -
或者根本没有
operator==?不知道为什么它是 UB 而不是格式错误...
标签: c++ c++17 stdoptional