【发布时间】:2017-03-21 13:06:02
【问题描述】:
考虑this 代码。
struct Test : public std::optional<int> { };
Test o1, o2;
o1 == o2;
对于最后一行gcc-7.0.1 抱怨error: ambiguous overload 指向两个重载,用于比较一个可选值和一个值。但是它不应该只是选择带有两个可选的重载并成功编译代码吗?
编辑 值比较的重载不应该有“守卫”不允许它们实例化从 std::optional 继承的类型吗?
【问题讨论】:
-
一个更好的问题是你为什么要从
optional继承? -
@Nicol Bolas 好吧,为了给它增加一些额外的语义负载 ։) 建立一个私有成员可能是另一种选择,但这是一个更糟糕的选择,因为我需要
std::optional的所有功能提供另外我正在添加更多功能。不想重新定义reset()、emplace()等
标签: c++ gcc operator-overloading optional c++17