Great explanation about “Two-phase name lookup”
To make this work, the C++ standard defines a “two-phase name lookup” rule for names in templates. Names inside templates are divided to two types:
- Dependent – names that depend on the template parameters but aren’t declared within the template.
- Non-dependent – names that don’t depend on the template parameters, plus the name of the template itself and names declared within it.
When the compiler tries to resolve some name in the code, it first decides whether the name is dependent or not, and the resolution process stems from this distinction. While non-dependent names are resolved “normally” – when the template is defined, the resolution for dependent names happens at the point of the template’s instantiation. This is what ensures that a specialization can be noticed correctly in the example above.
via Dependent name lookup for C++ templates – Eli Bendersky’s website.
It’s a fairly practical algorithm and the result looks nice. I implemented the algorithm with OpenCL last year.
The purpose of the second part is to design and implement a new interpolation method ABOS (Approximation Based On Smoothing), which would eliminate limitations of ex- isting methods and which would be robust and flexible enough for interpolating any data set, such as a complex of geological and seismic measurements, temperature distri- bution, height of a snow layer, concentration of contaminants in an aquifer or digital model of terrain.
So much of modern computer science, engineering and chip design is concerned with masking the inherent limitations that the memory hierarchy and von Neumann architecture impose on computation, Chua says, that once those limitations are removed, “every computer programmer will have to go back to school.”
The Billion-Dollar Race to Reinvent the Computer Chip – Scientific American.