Hi,
sorry for replying that late to this thread.
A Tensor module would of course be very welcome: it is part of the features that we planed since the beginning of Eigen, so I'm very glad there is a concrete starting point.
There has been some debate on the C++11 issue, and I have to agree that having features relying on C++11 is quite a concern. After some thoughts, it seems pretty clear that C++11 features is the only way to implement a Tensor module the "right way". Looking at your code, a C++98 only version would look much more complicated while it's currently only about storage. So I'm not against importing it into unsupported to give the visibility it deserve and make it maturing more rapidly (hopefully).
However, it is important to make sure C++11 features cannot be used by mistake. It has been suggested to ask for the user to define a new preprocessor token (EIGEN_ENABLE_CXX11) for that purpose. Since I'm trying to limit the amount of compilation options, I'd like to suggest two other solutions:
- Put "CXX11" in the module name, e.g., Eigen/CXX11/Tensor and all CXX11 modules could go in Eigen/CXX11 more like "Eigen/CXX11" was a "side" project.
- Add a new namespace for C++11 features, e.g., Eigen::CXX11 or simply Eigen11 or ????
Note that these two options are not exclusive.
Anyway, this also means the Tensor module will never be included by Eigen/Dense or Eigen/Eigen.
Regarding the feature set, assignment and slices are of course one of the most important. Fixed sizes and tensor products have not been mentioned yet, but are very important too! With C++11, fixed-sizes should not be difficult to add. Tensor products is more challenging regarding the API! Let's see if we can come up with something better than Blitz++!
I've also a question regarding the ColMajor/RowMajor option. I guess they rather mean something like forward/backward storage order, but is that option really needed??
cheers,
gael