@@ -404,6 +404,15 @@ using _Algorithm_int_t = conditional_t<is_integral_v<_Ty>, _Ty, ptrdiff_t>;
404
404
template <class _Ty>
405
405
concept _Destructible_object = is_object_v<_Ty> && destructible<_Ty>;
406
406
407
+ template <template <class...> class _Template, class... _Args>
408
+ void _Derived_from_specialization_impl(const _Template<_Args...>&);
409
+
410
+ template <class _Ty, template <class...> class _Template>
411
+ concept _Derived_from_specialization_of =
412
+ requires(const _Ty& _Obj) {
413
+ _STD _Derived_from_specialization_impl<_Template>(_Obj); // qualified: avoid ADL, handle incomplete types
414
+ };
415
+
407
416
namespace ranges {
408
417
namespace _Iter_move {
409
418
#if defined(__clang__) || defined(__EDG__) // TRANSITION, VSO-1681199
@@ -2932,23 +2941,17 @@ namespace ranges {
2932
2941
2933
2942
_EXPORT_STD struct view_base {};
2934
2943
2935
- template <template <class...> class _Template, class... _Args>
2936
- void _Derived_from_specialization_impl(const _Template<_Args...>&);
2937
-
2938
2944
template <class _Ty, template <class...> class _Template>
2939
- concept _Derived_from_specialization_of =
2940
- is_object_v<_Ty> && requires(const _Ty& _Obj) {
2941
- _RANGES _Derived_from_specialization_impl<_Template>(
2942
- _Obj); // qualified: avoid ADL, handle incompletable types
2943
- };
2945
+ concept _Strictly_derived_from_specialization_of =
2946
+ is_object_v<_Ty> && _Derived_from_specialization_of<_Ty, _Template>;
2944
2947
2945
2948
_EXPORT_STD template <class _Derived>
2946
2949
requires is_class_v<_Derived> && same_as<_Derived, remove_cv_t<_Derived>>
2947
2950
class view_interface;
2948
2951
2949
2952
_EXPORT_STD template <class _Ty>
2950
2953
inline constexpr bool enable_view =
2951
- derived_from<_Ty, view_base> || _Derived_from_specialization_of <_Ty, view_interface>;
2954
+ derived_from<_Ty, view_base> || _Strictly_derived_from_specialization_of <_Ty, view_interface>;
2952
2955
2953
2956
_EXPORT_STD template <class _Ty>
2954
2957
concept view = range<_Ty> && movable<_Ty> && enable_view<_Ty>;
0 commit comments