为什么允许推导私有类型?

时间:2019-01-31 20:49:43

标签: c++ templates language-lawyer private template-deduction

为此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的限制吗?

0 个答案:

没有答案