
On Sun, Oct 7, 2012 at 3:58 PM, Lorenzo Caminiti <lorcaminiti@gmail.com>wrote:
BTW, is this true also for N3351 concepts or just for C++0x concepts? Because iterator tags are still in N3351 and they are even made part of the specification (so they're not just an implementation detail/workaround):
N3351 does this because they do not have direct support for explicit concept maps. The problem is, you still need to at least emulate explicit concept maps in their approach, otherwise you can get ambiguity between concepts that have similar requirements but with different semantics/axioms (such as forward iterator and input iterator). The way N3351 disambiguates is they require C++98 style iterator categories -- if a creator of an iterator type associates with it an input_iterator_tag, then it is an input iterator. C++0x's approach removed the need for iterator categories because it directly supports both auto and explicit concepts. -- -Matt Calabrese