1 // { dg-options "-std=c++17 -fconcepts" } 2 3 template<typename T> 4 concept bool C1 = __is_same_as(T, int); 5 6 template<int N> 7 concept bool C2 = N == 0; 8 9 template<template<typename> class X> 10 concept bool C3 = true; 11 12 template<typename> struct Foo; 13 14 // Type template parameters 15 template<C1 T = int> struct S1 { }; 16 template<C1 = int> struct S2; 17 template<C1 T> struct S2 { }; 18 19 // Non-type template parameters 20 template<C2 N = 0> struct S3 { }; 21 template<C2 = 0> struct S4; 22 template<C2 N> struct S4 { }; 23 24 // Template template parameters 25 template<C3 X = Foo> struct S5 { }; 26 template<C3 = Foo> struct S6; 27 template<C3 X> struct S6 { }; 28 29 S1<> s1; 30 S2<> s2; 31 S3<> s3; 32 S4<> s4; 33 S5<> s5; 34 S6<> s6; 35