re PR c++/59204 (Incorrect metaprogram evaluation in SFINAE context)
authorPaolo Carlini <paolo.carlini@oracle.com>
Thu, 18 Dec 2014 23:43:46 +0000 (23:43 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Thu, 18 Dec 2014 23:43:46 +0000 (23:43 +0000)
2014-12-18  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/59204
* g++.dg/cpp0x/sfinae53.C: New.

From-SVN: r218878

gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/sfinae53.C [new file with mode: 0644]

index 24696e0e67c9a5b3ce2d792bd266d709e2aea1cb..878a82e508cfa61ce3fac00c85e73ee5d1b663f3 100644 (file)
@@ -1,3 +1,8 @@
+2014-12-18  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/59204
+       * g++.dg/cpp0x/sfinae53.C: New.
+
 2014-12-18  Vladimir Makarov  <vmakarov@redhat.com>
 
        PR rtl-optimization/64291
diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae53.C b/gcc/testsuite/g++.dg/cpp0x/sfinae53.C
new file mode 100644 (file)
index 0000000..19b00cf
--- /dev/null
@@ -0,0 +1,23 @@
+// PR c++/59204
+// { dg-do compile { target c++11 } }
+
+template< class T >
+  using void_t = void;
+
+template< class T, class = void >
+  struct has_type
+{ constexpr static bool value = false; };
+
+template< class T >
+  struct has_type<T, void_t<typename T::type>>
+{ constexpr static bool value = true; };
+
+struct yes  { using type = int; };
+struct no   { };
+
+int
+main( )
+{
+  static_assert(     has_type<yes>::value, "false negative!" );
+  static_assert( not has_type<no >::value, "false positive!" );
+}