namespace Eigen {

/** \page TopicPassingByValue Passing Eigen objects by value to functions

Passing objects by value is almost always a very bad idea in C++, as this means useless copies, and one should pass them by reference instead.

With Eigen, this is even more important: passing \ref TopicFixedSizeVectorizable "fixed-size vectorizable Eigen objects" by value is not only inefficient, it can be illegal or make your program crash! And the reason is that these Eigen objects have alignment modifiers that aren't respected when they are passed by value.

So for example, a function like this, where v is passed by value:

\code
void my_function(Eigen::Vector2d v);
\endcode

needs to be rewritten as follows, passing v by reference:

\code
void my_function(const Eigen::Vector2d& v);
\endcode

Likewise if you have a class having a Eigen object as member:

\code
struct Foo
{
  Eigen::Vector2d v;
};
void my_function(Foo v);
\endcode

This function also needs to be rewritten like this:
\code
void my_function(const Foo& v);
\endcode

Note that on the other hand, there is no problem with functions that return objects by value.

*/

}
