// { dg-options "-std=c++17 -fconcepts" } template concept bool Class() { return __is_class(T); } template concept bool Union() { return __is_union(T); } // Check non-overlapping specializations template struct S1 { static const int value = 0; }; template struct S1 { static const int value = 1; }; template struct S1 { static const int value = 2; }; struct S { }; union U { }; static_assert(S1::value == 0, ""); static_assert(S1::value == 1, ""); static_assert(S1::value == 2, ""); int main() { }