class A
{
struct B{};
public:
static void test(A::B){}
};
struct C
{
template<class T>
operator T()
{
return T();
}
};
int main()
{
A::test(C());
}
此代码适用于clang 3.7,gcc 5.1和vC++ 14.2。
2问题,
1.为什么模板可以推导出类型是A :: B? (太聪明了!)
据我所知,模板通过return语句而不是参数来推断类型。
但是我发现了一些对N4606 12.3.2 6 A conversion function template shall not have a deduced return type (7.1.7.4).
感兴趣的东西(但是,由于7.1.7.4太难理解,我无法找到更多信息。)
2.为什么转换函数模板访问A :: B ?C++ - 转换函数模板演绎,为什么这个工作?
感谢。
哦,我明白了。 '推导返回类型'在'7.1.7.4',但'转换函数模板不应该有推导返回类型'。这意味着'7.1.7.4'对'转换函数'没有任何东西。我不需要阅读'7.1.7.4'部分。 – Caesar
我在哪里可以通过'type'而不是'name'获得有关访问控制的更多信息? – Caesar
@Caesar没有类型的访问控制。 – Barry