===================================================================
@@ -0,0 +1,21 @@
+// { dg-options "-std=c++1y" }
+
+template<typename T>
+ concept bool Type() { return true; }
+
+template<typename T, typename U>
+ concept bool Same() { return __is_same_as(T, U); }
+
+template<Same<int> T> struct S1 { };
+template<typename T, Same<T> U> struct S2 { };
+
+void f(Same<int> q) { }
+void g(Type a, Same<decltype(a)> b) { }
+
+int main() {
+ S1<char> s1; // { dg-error "deduction|invalid" }
+ S2<int, char> s2; // { dg-error "deduction|invalid" }
+
+ f('a'); // { dg-error "matching" }
+ g(0, 'a'); // { dg-error "matching" }
+}
===================================================================
@@ -0,0 +1,35 @@
+# Copyright (C) 2002-2013 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3. If not see
+# <http://www.gnu.org/licenses/>.
+
+# GCC testsuite that uses the `dg.exp' driver.
+
+# Load support procs.
+load_lib g++-dg.exp
+
+# If a testcase doesn't have special options, use these.
+global DEFAULT_CXXFLAGS
+if ![info exists DEFAULT_CXXFLAGS] then {
+ set DEFAULT_CXXFLAGS " -pedantic-errors -Wno-long-long"
+}
+
+# Initialize `dg'.
+dg-init
+
+# Main loop.
+g++-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.C]] $DEFAULT_CXXFLAGS
+
+# All done.
+dg-finish
===================================================================
@@ -0,0 +1,33 @@
+// { dg-options "-std=c++1y" }
+
+template<typename T>
+ concept bool Type() { return true; }
+
+template<typename T, typename U>
+ concept bool Same() { return __is_same_as(T, U); }
+
+template<typename T, typename U>
+ concept bool C1() { return true; }
+
+template<typename T, typename... Args>
+ concept bool C2() { return true; }
+
+template<Same<int> T> struct S1 { };
+template<typename T, Same<T> U> struct S2 { };
+
+void f(Same<int> q) { }
+void g(Type a, Same<decltype(a)> b) { }
+
+void h0(Same<int>* a) { }
+void h1(C1<int>* a) { }
+void h2(C2<char, short, int, long>* a) { }
+
+int main() {
+ S1<int> s1;
+ S2<int, int> s2;
+ f(0);
+ g(0, 1);
+ h0((int*)0);
+ h1((int*)0);
+ h2((int*)0);
+}