re PR c++/59988 (Failing to specialize template class)
authorPaolo Carlini <paolo@gcc.gnu.org>
Tue, 24 Mar 2015 10:50:36 +0000 (10:50 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Tue, 24 Mar 2015 10:50:36 +0000 (10:50 +0000)
2015-03-24  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/59988
* g++.dg/cpp0x/vt-59988.C: New.

From-SVN: r221623

gcc/testsuite/g++.dg/cpp0x/vt-59988.C [new file with mode: 0644]

diff --git a/gcc/testsuite/g++.dg/cpp0x/vt-59988.C b/gcc/testsuite/g++.dg/cpp0x/vt-59988.C
new file mode 100644 (file)
index 0000000..ab611f5
--- /dev/null
@@ -0,0 +1,28 @@
+// PR c++/59988
+// { dg-do compile { target c++11 } }
+
+template<template<typename...> class C, typename... T>
+struct is_valid_specialization {
+  typedef struct { char _; } yes;
+  typedef struct { yes _[2]; } no;
+
+  template<template<typename...> class D, typename... U>
+  static yes test(D<U...>*);
+  template<template<typename...> class D, typename... U>
+  static no test(...);
+
+  constexpr static bool value = (sizeof(test<C, T...>(0)) == sizeof(yes));
+};
+
+template<typename T>
+struct Test1 { };
+
+template<typename T1, typename T2>
+struct Test2 { };
+
+template<typename...>
+struct TestV { };
+
+static_assert(!is_valid_specialization<Test1, int>::value, "");
+static_assert(!is_valid_specialization<Test2, int>::value, "");
+static_assert(!is_valid_specialization<TestV, int>::value, "");