Я сделал этот простой класс, который все еще играет со мной:
class A {
private:
class B {};
public:
B getB() {
return B();
};
};
Как и в С++ 03, этот класс компилируется отлично, но просто нет красивого способа присвоить результат getB()
lvalue в том смысле, что:
A::B b = A().getB();
Не компилируется.
Я получил его с помощью промежуточного шаблона следующим образом:
template <typename T>
struct HideType {
typedef T type;
};
HideType<A::B>::type b = A().getB();
Но это выглядит просто ужасно, для этой простой задачи получения переменной A:: B lvalue.
Это больше не так, как на С++ 11, или, по крайней мере, это не с gcc. Этот код все еще недействителен:
A::B b = A().getB();
Но этот имеет значение:
auto b = A().getB();
Есть ли лазейка в стандартном отношении к этому?