Thank you for the review! - I moved the concepts back into the class and changed them to template aliases because class local concepts aren't a thing that works. + They are not inline constexpr bools because that ICE's GCC pretty hard, as you explained to me earlier, so we use ::value in some places rather than _v - I named the alias __is_array_convertible, to match what the intent is, and named the template parameters very explicitly. + I moved it into type_traits, but I didn't change bits/unique_ptr.h or shared_ptr yet because I'm not confident I can do that quickly in one go. + (And it should probably be a different patch anyways, but it should be in the right place when we introduce it here.) --------- 2019-11-21 JeanHeyd "ThePhD" Meneide * include/std/span: Use concepts and ranges:: calls instead of enable_if and friends. * include/std/ranges: tear basic concepts out and put in range_access.h for "ranges lite" internal header. * include/std/type_traits: __is_array_convertible trait. Is common to unique/shared_ptr as well (preparation for changing unique/shared_ptr soon). * include/bits/range_access.h: Remove __adl_* versions of access functions.