| // PR c++/49785 |
| // { dg-do compile { target c++11 } } |
| // { dg-additional-options "-Wno-return-type" } |
| |
| template <typename, typename ...> struct B { }; |
| template <typename> class A; |
| |
| template <typename R, typename ... S> |
| struct A <R (S ...)> : public B <R, S ...> |
| { |
| struct C {}; |
| template <typename D> A (D, C = C ()) { } |
| R operator () (...); |
| }; |
| |
| template <typename R, typename ... S, typename T> |
| auto operator >> (A <R (S ...)>, T)->A <R (S ...)> |
| { |
| []() {}; |
| } |
| |
| int |
| main () |
| { |
| A <int (int, int)> a = [](int, int) {}; |
| auto b = []{}; |
| (a >> b) (3, 5); |
| } |