Eigen::VectorXdを戻り値とする関数の出力を受け取る変数の宣言に、型推論を用いた時の挙動についての疑問
<実行環境>
 - OS: OSX 10.11.3
 - コンパイラ: clang++ 
以下は、clang++ -vの出力
Apple LLVM version 7.0.2 (clang-700.1.81)
Target: x86_64-apple-darwin15.3.0
Thread model: posix
 - 非標準ライブラリとして、Eigenを使用(http://eigen.tuxfamily.org/index.php?title=Main_Page)
 - C++11の機能を使用
<コード>
#include <iostream>   
#include <Eigen/Core>
using namespace std;
using namespace Eigen;
class A{
private:
    VectorXd ma;
public:
    A(VectorXd a = VectorXd::Ones(1)){
        ma = a;
    }
    VectorXd geta(){
        return ma;
    }
};
class B : public A{
public:
   B(VectorXd a = VectorXd::Ones(1)): A(a){
       // In the following line, if you use the type name "VectorXd" and don't use "auto", you can get the normal result. 
       const auto b = 2 * geta();
       // If you release the comment out the following line, even if using the "auto" during initialization of b, you can get the normal result. 
       // const auto c = geta();
       cout << "b = " << b << endl;
       cout << "b = " << b << endl;
   }
};
int main() {
    VectorXd la = 2 * VectorXd::Ones(1);
    cout << "la = " << la << endl;
    B test = B();
    return 0;
}
<実行結果>
- 上記のコードをそのまま実行した場合の出力
 la = 2
 b = 2
 b = 4
- Class Bのコンストラクタ内の変数bの宣言・初期化時に型推論(auto)を使わずに、VectorXdという型を用いた場合の出力
 la = 2
 b = 2
 b = 2
- 変数bの宣言・初期化時には型推論を使用するが、その次の行でconst auto c = geta()という式を評価する場合の出力
 la = 2
 b = 2
 b = 2
<質問内容>
修正を行う前のコードだと、意図していた動作(la及びbの2度の出力結果が同じ値を示す)にならない理由を伺いたです。bに型情報を与えることが解決策になることは、確かめることができましたが、なぜこのような動作になるのかが、未熟な私には理解できません。
ご教示いただけると幸いです。