为此question所触发,我想知道是否存在合法的技巧来获取私有嵌套类型的别名(请注意,问题是完全不同的,而且并非如此“如何访问声明为私有的内容?”)。受answer的启发,我的第一步是编写以下代码:
class foo {
struct bar{};
public: void foobar(const bar&){}
};
struct hack {
template <typename T>
operator T() { return {}; }
};
int main() {
foo f;
//f.foobar(foo::bar());// NOPE: bar is private !!
f.foobar(hack()); // hm, bar is not private?
}
我不得不承认,我已经迷路了。 为什么允许模板推导私有类型?还要考虑到这一点
struct no_hack {
operator foo::bar(){ return {}; }
};
不允许(foo::bar
是私有的)。
请注意,我并不是在问允许使用hack
的动机是什么,而是该标准的哪些部分可以解释这种差异?类型推导不受private
的限制吗?