Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/g++.dg/cpp1y/pr84496.C @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | |
children |
line wrap: on
line source
// PR c++/84496 // { dg-do compile { target c++14 } } template <typename T, T n> struct C { static constexpr T D = n; }; struct E : C<bool, false> {}; template <typename> struct F : C<bool, false> {}; template <typename T> T foo (); template <typename> struct H { typedef int G; }; template <typename> class I; struct L; template <typename, typename> struct J; template <bool, bool, typename...> struct K; struct R { template <typename M, typename... N> static J<decltype (foo<M> () (foo<N>...)), L> o; }; template <typename P, typename... Q> struct K<false, false, P, Q...> : R { typedef decltype (o<P, Q...>) G; }; template <typename P, typename... Q> struct D : K<E::D, F<typename H<P>::G>::D, P, Q...> {}; template <typename P, typename... Q> struct I<P (Q...)> : D<P, Q...> {}; template <typename> class function; template <typename S, typename... Q> struct function<S (Q...)> { template <typename T, typename = typename I<T (Q...)>::G> struct C; template <typename, typename> using U = int; template <typename P, typename = U<int, void>, typename = U<C<P>, void>> function (P); }; template <typename S, typename... Q> template <typename P, typename, typename> function<S (Q...)>::function (P) { } void bar (function<void (int)>); void baz () { auto a = [] { static int counter; bar ([] (auto) { counter++; }); }; }