どなたか、教えてください。以下で func3() の値がおかしくなってしまいます。

class base_1 {
public:
base_1() : data_( 123 ) {}
int get() { return data_; }
int data_;
};
class base : public base_1 {
public:
typedef base_1 base_1_type;
public:
int GET() { return base::base_1_type::get(); }
};
class other { public: int dummy_; };
class derived : public other, public base {
public:
int func1() { return base::base_1::get(); }
int func2() { return base::GET(); }
int func3() { return base::base_1_type::get(); }
};
int main( int argc, char * argv[] )
{
derived D;
printf( "%d\n", D.func1() );
printf( "%d\n", D.func2() );
printf( "%d\n", D.func3() );// おかしい!
}