This is to work around undefined behavior according to the Standard,
[lib.res.on.functions]/2:
"In particular, the effects are undefined in the following cases: [..]
- if an incomplete type (3.9) is used as a template argument when
instantiating a template component."
This is used by reports like register and balance so that separated
commodities without spaces in them needed be surrounded by quotes. It
will still occur in most other places.
Fixes#200 / F82CF11F-BFD9-4512-A562-202B04B68051
With -s, -M/Y/D, -n, and a few other flags, postings get "grouped" into
meta-transactions that contain more postings than before. In all these
cases, -V use the date of the *earliest* posting in that group, which
makes little sense and caused breakages with -J. It now uses the latest
date.
Fixes#197 / 68EAF363-D0FE-4127-866E-A5AEBACB65D6
With -X COMM, all values are computed in terms of COMM, regardless.
With -V, only secondary commodities will ever be computed, never
primaries. Further, if a secondary commodities has an associated price,
the valuation is done in terms of that price's commodity.
This outputs the pricing relationship of commodities in your data file,
as of DATE (optional), using the DOT language. If you have graphviz
installed, it can be viewed quite simply using:
ledger pricemap | dotty -
Each relationship in the graph shows the conversion factor to exchange
one commodity for another, and the date at which this factor was
determined.
Every annotated commodity is based on a "referent", or the unannotated
version of that commodity. When stripping all annotations away,
however, rather than simply returning the referent we were actually
searching for it by name. There was no reason to do this, not to
mention it was taking up to 7% of the total runtime of some reports.