Skip to content

Commit 83b93e0

Browse files
committed
Add is() matchers for templates
1 parent b59f539 commit 83b93e0

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed

include/cpp2util.h

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -578,6 +578,35 @@ static nonesuch_ nonesuch;
578578
using empty = void;
579579

580580

581+
// Templates
582+
//
583+
template <template <typename...> class C, typename... Ts>
584+
constexpr auto is(C< Ts...> const& ) -> bool {
585+
return true;
586+
}
587+
588+
#if defined(_MSC_VER)
589+
template <template <typename, typename...> class C, typename T>
590+
constexpr auto is( T const& ) -> bool {
591+
return false;
592+
}
593+
#else
594+
template <template <typename...> class C, typename T>
595+
constexpr auto is( T const& ) -> bool {
596+
return false;
597+
}
598+
#endif
599+
600+
template <template <typename,auto> class C, typename T, auto V>
601+
constexpr auto is( C<T, V> const& ) -> bool {
602+
return true;
603+
}
604+
605+
template <template <typename,auto> class C, typename T>
606+
constexpr auto is( T const& ) -> bool {
607+
return false;
608+
}
609+
581610
// Types
582611
//
583612
template< typename C, typename X >

0 commit comments

Comments
 (0)