aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2015-11-24 18:16:26 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2015-11-24 18:16:26 +0000
commit660f3dc7ddd5e02e9922ecf94c1b17b72101476c (patch)
tree34c5b3324b498b20db0c9d9c39f02f9c065cedea
parentff17c26257cb5c20c0b9be65161d9e9e6e5902d0 (diff)
downloadgcc-660f3dc7ddd5e02e9922ecf94c1b17b72101476c.zip
gcc-660f3dc7ddd5e02e9922ecf94c1b17b72101476c.tar.gz
gcc-660f3dc7ddd5e02e9922ecf94c1b17b72101476c.tar.bz2
re PR c++/68388 (incomplete type bug when using decltype)
2015-11-24 Paolo Carlini <paolo.carlini@oracle.com> PR c++/68388 * g++.dg/cpp1y/pr68388.C: New. From-SVN: r230827
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/pr68388.C42
2 files changed, 47 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 5fcb769..ab03820 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2015-11-24 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/68388
+ * g++.dg/cpp1y/pr68388.C: New.
+
2015-11-24 Aditya Kumar <aditya.k7@samsung.com>
Sebastian Pop <s.pop@samsung.com>
diff --git a/gcc/testsuite/g++.dg/cpp1y/pr68388.C b/gcc/testsuite/g++.dg/cpp1y/pr68388.C
new file mode 100644
index 0000000..f1a342a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/pr68388.C
@@ -0,0 +1,42 @@
+// { dg-do compile { target c++14 } }
+
+namespace std {
+typedef int size_t;
+template <std::size_t... Indexes>
+struct index_sequence {};
+}
+
+template <class...> class Tuple {};
+
+template <std::size_t I, class TFirst>
+auto get(Tuple<TFirst>) {
+ return TFirst();
+}
+
+template <std::size_t I, class Functor, class T1, class T2>
+auto apply_impl(Functor f, T1 t1, T2 t2) {
+ return f(get<I>(t1), get<I>(t2));
+}
+
+template <std::size_t... Indexes, class Functor, class T1, class T2>
+auto map_impl(std::index_sequence<Indexes...>, Functor f, T1 t1, T2 t2) {
+ Tuple<decltype(apply_impl<Indexes>(f, t1, t2))...>();
+}
+
+template <class Functor, class T1, class T2>
+auto map_impl(Functor f, T1 t1, T2 t2) {
+ map_impl(std::index_sequence<0>(), f, t1, t2);
+}
+
+struct Less {
+ template <class Lhs, class Rhs>
+ auto operator()(Lhs lhs, Rhs rhs) -> decltype(lhs < rhs) {
+ return lhs < rhs;
+ }
+};
+
+int main() {
+ auto t1 = Tuple<int>();
+ auto t2 = Tuple<int>();
+ map_impl(Less(), t1, t2);
+}