Skip to content

Commit e1b1606

Browse files
committed
Add is() matchers for templates
1 parent 4263420 commit e1b1606

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
@@ -517,6 +517,33 @@ static std::nullptr_t nonesuch = nullptr;
517517
// TODO: Does this really warrant a new synonym? Perhaps "is void" is enough
518518
using empty = void;
519519

520+
template <template <typename...> class C, typename... Ts>
521+
constexpr auto is(C< Ts...> const& ) -> bool {
522+
return true;
523+
}
524+
525+
#if defined(_MSC_VER)
526+
template <template <typename, typename...> class C, typename T>
527+
constexpr auto is( T const& ) -> bool {
528+
return false;
529+
}
530+
#else
531+
template <template <typename...> class C, typename T>
532+
constexpr auto is( T const& ) -> bool {
533+
return false;
534+
}
535+
#endif
536+
537+
template <template <typename,auto> class C, typename T, auto V>
538+
constexpr auto is( C<T, V> const& ) -> bool {
539+
return true;
540+
}
541+
542+
template <template <typename,auto> class C, typename T>
543+
constexpr auto is( T const& ) -> bool {
544+
return false;
545+
}
546+
520547
template< typename C, typename X >
521548
auto is( X const& ) -> bool {
522549
return false;

0 commit comments

Comments
 (0)