ソースを参照

meta: more concepts, less sfinae

skypjack 1 ヶ月 前
コミット
392e522b62
1 ファイル変更9 行追加6 行削除
  1. 9 6
      src/entt/meta/container.hpp

+ 9 - 6
src/entt/meta/container.hpp

@@ -28,29 +28,32 @@ namespace entt {
 /*! @cond ENTT_INTERNAL */
 namespace internal {
 
-template<typename Type, typename = void>
+template<typename Type>
 struct sequence_container_extent: integral_constant<meta_dynamic_extent> {};
 
 template<typename Type>
-struct sequence_container_extent<Type, std::enable_if_t<is_complete_v<std::tuple_size<Type>>>>: integral_constant<std::tuple_size_v<Type>> {};
+requires is_complete_v<std::tuple_size<Type>>
+struct sequence_container_extent<Type>: integral_constant<std::tuple_size_v<Type>> {};
 
 template<typename Type>
 inline constexpr std::size_t sequence_container_extent_v = sequence_container_extent<Type>::value;
 
-template<typename, typename = void>
+template<typename>
 struct key_only_associative_container: std::true_type {};
 
 template<typename Type>
-struct key_only_associative_container<Type, std::void_t<typename Type::mapped_type>>: std::false_type {};
+requires requires { typename Type::mapped_type; }
+struct key_only_associative_container<Type>: std::false_type {};
 
 template<typename Type>
 inline constexpr bool key_only_associative_container_v = key_only_associative_container<Type>::value;
 
-template<typename, typename = void>
+template<typename>
 struct reserve_aware_container: std::false_type {};
 
 template<typename Type>
-struct reserve_aware_container<Type, std::void_t<decltype(&Type::reserve)>>: std::true_type {};
+requires requires { typename Type::reserve; }
+struct reserve_aware_container<Type>: std::true_type {};
 
 template<typename Type>
 inline constexpr bool reserve_aware_container_v = reserve_aware_container<Type>::value;