The thing is, it just looks like an assignment, but really, this line:

Code:
	Derived dT = d.transpose();
Is not an assignment, it's initialization. The above line is equivalent to
Code:
 Derived dT(d.transpose9));
This is the proper behavior, and is not dependent on your compiler.

Try the following:
Code:
int
main()
{
	Derived d;
	Derived dT = d.transpose();
	dT = d.Transpose();
}