diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2015-11-24 18:16:26 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2015-11-24 18:16:26 +0000 |
commit | 660f3dc7ddd5e02e9922ecf94c1b17b72101476c (patch) | |
tree | 34c5b3324b498b20db0c9d9c39f02f9c065cedea | |
parent | ff17c26257cb5c20c0b9be65161d9e9e6e5902d0 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1y/pr68388.C | 42 |
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); +} |