@dgasmith we are missing a bit more than that, but I suspect you are probably only highlighting what most people will use, if that’s the case I think you need to add initializer lists to that list
Aside from the range-based for loops in fsapt (I presume that’s what @jturney was referring to), and the std::to_string function, which most recently brought up this issue, the only other C++11 features I know of in Psi4 are some non-static inline member variable initializations in optking, and variadic templates in libfrag. Complaints about the latter seem to have subsided so I’m guessing they are no longer issues (?).
Despite what the Intel website says, the range-based for loops in fsapt do not compile for me with Intel 13 (the non-static inline member variables require Intel 14 according to Intel’s website and obviously also do not compile). I had also tried using lambdas at one point, but ran into problems with Intel 13, despite them supposedly being supported there as well (admittedly my use was non-trivial and may not have constituted a fair trial). Lines around 115 of
cmake/compilers/CheckCXX11Features.cmake suggest that Intel 13’s support of C++11 is known to be buggy by @robertodr .
Getting back to @jturney’s idea of only using those features of the C++11 standard that are not missing from most compilers, as best as I can tell, variadic templates are the only demonstrated feature that work (ignoring things like std::to_string, which are a header issues) with Intel 13. Quite frankly, aside from rvalue references, variadic templates are the only C++11 feature I personally care about (I’m still using boost smart pointers, boost threading, and I have my own strong-typed enums that I use). Lambdas are nice, but I don’t think it’s a huge deal to write a functor if I need a lambda. I haven’t really seen what I would call a nice usage of an initializer list for a non POD type (initializer lists for POD types have always existed); constructors serve the same purpose for a derived type. The range-based for loops are clean and I do like them, but honestly I’m so used to not having them, that I’ll probably never use them. I absolutely hate the idea of auto, and will never use it unless I have to (the type of a lambda is an example of having to use it), because the compiler knowing the type and you knowing the type are two very different things…
edit: switched foreach to range-based for loop