【发布时间】:2015-12-13 13:36:41
【问题描述】:
我做了这个简单的课程,但我仍然在玩:
class A {
private:
class B {};
public:
B getB() {
return B();
};
};
从 C++03 开始,这个类编译得很好,但是没有漂亮的方法将getB() 的结果分配给一个左值,从某种意义上说:
A::B b = A().getB();
不编译。
我通过使用中间模板得到它,以这种方式:
template <typename T>
struct HideType {
typedef T type;
};
HideType<A::B>::type b = A().getB();
但这看起来很糟糕,对于获取 A::B 左值变量的简单任务。
从 C++11 开始,这不再是真的,或者至少在 gcc 中不是这样。此代码仍然无效:
A::B b = A().getB();
但这是有效的:
auto b = A().getB();
这方面的标准有漏洞吗?
【问题讨论】:
-
我无法让
HideType<A::B>::type b = ...进行编译,你能展示一个MCVE 发生在哪里吗?您可能对 litb 的 robber structure 感兴趣。
标签: c++ c++11 language-lawyer