Skip to content

Commit 36e88c6

Browse files
committed
Add is() matchers for templates
1 parent d7a7332 commit 36e88c6

File tree

1 file changed

+27
-0
lines changed

1 file changed

+27
-0
lines changed

include/cpp2util.h

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -556,6 +556,33 @@ static std::nullptr_t nonesuch = nullptr;
556556
// TODO: Does this really warrant a new synonym? Perhaps "is void" is enough
557557
using empty = void;
558558

559+
template <template <typename...> class C, typename... Ts>
560+
constexpr auto is(C< Ts...> const& ) -> bool {
561+
return true;
562+
}
563+
564+
#if defined(_MSC_VER)
565+
template <template <typename, typename...> class C, typename T>
566+
constexpr auto is( T const& ) -> bool {
567+
return false;
568+
}
569+
#else
570+
template <template <typename...> class C, typename T>
571+
constexpr auto is( T const& ) -> bool {
572+
return false;
573+
}
574+
#endif
575+
576+
template <template <typename,auto> class C, typename T, auto V>
577+
constexpr auto is( C<T, V> const& ) -> bool {
578+
return true;
579+
}
580+
581+
template <template <typename,auto> class C, typename T>
582+
constexpr auto is( T const& ) -> bool {
583+
return false;
584+
}
585+
559586
template< typename C, typename X >
560587
auto is( X const& ) -> bool {
561588
return false;

0 commit comments

Comments
 (0)