2 // { dg-do compile { target c++14 } }
5 template <typename T> constexpr auto foo (T &e) { return e.foo (); }
6 template <typename T> constexpr auto bar (T &e) { return foo (e); }
7 template <typename T, int N> struct A { typedef T a[N]; };
8 template <typename T, unsigned long N> struct B {
10 typename A<T, N>::a d;
11 constexpr b foo () { return d; }
13 template <typename> struct C { long m; };
15 template <typename, unsigned long> struct E {
17 constexpr D operator* () { return {p->m}; }
18 constexpr E operator++ (int) { auto a{*this}; ++p; return a; }
20 template <typename T, unsigned long N>
21 constexpr bool operator!= (E<T, N> a, E<T, N>) { return a.p; }
22 template <unsigned long N, typename T, unsigned long M>
23 constexpr auto baz (B<T, M> s, B<D, N>)
34 constexpr auto a = B<C<int>, 5>{};