【发布时间】:2018-04-28 14:39:59
【问题描述】:
我目前正在调查为什么我能够从不应访问的上下文中调用私有函数。我已经将其范围缩小为一个非常简单的示例,但我仍然无法确定问题所在。
这是我的缩小版:
template<typename From, typename To>
concept bool ConvertibleNoNarrow = requires(From f, To t) {
t = { f };
};
template<typename T>
class Wrapper {
T t;
public:
Wrapper(ConvertibleNoNarrow<T> u) : t(u) { }
private:
// should be PRIVATE
void operator()() { }
};
int main() {
Wrapper<long> w(1);
// should not be able to call this!
w();
}
【问题讨论】:
-
我的第一直觉是它的a bug 带有实验性的东西
-
您能否补充一下这种情况是否只发生在呼叫接线员或其他功能上?
-
@UlrichEckhardt 好像和
operator ()没有关系,这只是我完整代码的残余。 -
如果你取消使用这个概念会发生什么?例如使
Wrappers 构造函数接受T而不是ConvertibleNoNarrow<T>。
标签: c++ c++11 c++-concepts