<実行環境>
- 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;
}

<実行結果>

  1. 上記のコードをそのまま実行した場合の出力
    la = 2
    b = 2
    b = 4
  2. Class Bのコンストラクタ内の変数bの宣言・初期化時に型推論(auto)を使わずに、VectorXdという型を用いた場合の出力
    la = 2
    b = 2
    b = 2
  3. 変数bの宣言・初期化時には型推論を使用するが、その次の行でconst auto c = geta()という式を評価する場合の出力
    la = 2
    b = 2
    b = 2

<質問内容>
修正を行う前のコードだと、意図していた動作(la及びbの2度の出力結果が同じ値を示す)にならない理由を伺いたです。bに型情報を与えることが解決策になることは、確かめることができましたが、なぜこのような動作になるのかが、未熟な私には理解できません。
ご教示いただけると幸いです。