[iter/meta] Fix build on newer clang
authorBehdad Esfahbod <behdad@behdad.org>
Sat, 26 Jan 2019 21:44:09 +0000 (22:44 +0100)
committerBehdad Esfahbod <behdad@behdad.org>
Sat, 26 Jan 2019 21:44:09 +0000 (22:44 +0100)
commit6b6783e1588ebe5772a1edc19552219e9d931bda
treeb4ebdddc94a395bca50b757f1536aa4acdc51ab0
parent5adb113bafb2cf10ea768ff7a15ad4e6a1270a29
[iter/meta] Fix build on newer clang

The mystery failure had to do with SFINAE failure because the template
function involved was accessing ::iter_t of a type that was also named iter_t.
In this context, apparently:

warning: ISO C++ specifies that qualified reference to 'iter_t' is a
constructor name rather than a type in this context, despite preceding 'typename' keyword
[-Winjected-class-name]

We use a new macro, also called hb_iter_t(), to get iterator type of
a type.  This uses declval/hb_decltype, and has the added benefit
that it returns correct type for const vs non-const objects, if they
have different iterators.
src/hb-iter.hh